经过数小时的搜索和测试,我无法通过这个挑战。
我正在尝试从另一个应用程序共享数据(网址、图像)-> 到我的应用程序。
但我无法找到关于如何实现这一点(在 Android 和 iOS 上)或可靠模块的正确文档(react-native-share-extension似乎有点过头了,并且不适用于 react-native-navigation v2(#139)并且不为 iOS 维护react-native-share-menu )
让我们谈谈 Android,我确实更新了我的清单<intent-filter>
(顺便说一句,iOS 中的等价物是什么?)
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
<data android:mimeType="text/plain" />
</intent-filter>
并成功在其他应用程序的共享列表中看到我的应用程序...并单击它打开我的应用程序...检查
现在我需要在我的应用程序中实际获取意图数据。我尝试Linking
从 react-native 使用,但没有任何成功,我没有得到任何控制台日志。
下面是我的代码,我缺少什么,或者我应该为我的 Android 和 iOS 项目做些什么来获取意图数据?
index.js
import App from './App';
应用程序.js
import { persistStore } from 'redux-persist';
import { Navigation } from "react-native-navigation";
import { Linking } from 'react-native';
// other imports ...
// [...]
const handleOpenURL = (event) => {
console.log(event.url);
};
Linking.addEventListener('url', handleOpenURL);
Linking.getInitialURL().then((url) => {
if (url) {
console.log('Initial url is: ' + url);
}
}).catch(err => console.error('An error occurred', err));
Navigation.events().registerAppLaunchedListener(() => {
persistStore(store, null, () => {
// Register Screens ...
Navigation.setRoot({
// Setting root to home page (home.js)
Home.js // 那里也试过
// imports
class Home extends Component {
//...
_handleOpenURL(event) {
console.log(event.url);
};
componentDidMount() {
Linking.addEventListener('url', this._handleOpenURL);
Linking.getInitialURL().then((url) => {
if (url) {
console.log('Initial url is: ' + url);
}
}).catch(err => console.error('An error occurred', err));
}
MainActivity.java // 这可能是我缺少类似 getIntent() 的地方?
package com.my.app;
import com.imagepicker.permissions.OnImagePickerPermissionsCallback;
import com.facebook.react.modules.core.PermissionListener;
import com.reactnativenavigation.NavigationActivity;
public class MainActivity extends NavigationActivity implements OnImagePickerPermissionsCallback {
private PermissionListener listener;
@Override
public void setPermissionListener(PermissionListener listener) {
this.listener = listener;
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (listener != null) {
listener.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
我在上面的MainActivity上尝试了Dave Bennet的解决方案,但遇到了一个我无法解决的错误(错误:方法没有覆盖或实现超类型的方法)
谢谢你的帮助!
------ 包
- “反应”:“16.6.3”,
- “反应原生”:“0.57.8”,
- “反应原生导航”:“^2.6.0”