我已经为我的 react native 应用程序设置了一个android 应用程序链接...但是每当我点击链接并选择我的应用程序打开它时,系统确实会尝试打开我的应用程序但我的应用程序崩溃了...我已经设置了 android正确链接并且我想在点击链接时启动的活动确实打开了..但是我无法在活动中设置RCTDeviceEventEmitter ...我对如何在这里提供反应上下文感到困惑..所以我创建了ReactContextFetcher.java 中的自定义类,如下所示:
public class ReactContextFetcher extends ReactContextBaseJavaModule {
@Override
public String getName() {
return "ReactContextFetcher";
}
public ReactContext fetchReactContext() {
return getReactApplicationContext();
}
}
我在由 android 应用程序链接启动的活动中使用此上下文,如下所示:
public class NewFriendActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(null);
ReactContext rContext = new ReactContextFetcher().fetchReactContext();
Intent intent = getIntent();
String data = intent.getData().toString();
String user = data.split("/add-friend/")[1];
Log.d("obscure_tag", data.toString());
sendEvent(rContext, "NewFriend", user);
}
private void sendEvent(ReactContext reactContext,
String eventName, String user) {
reactContext
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
.emit(eventName, user);
}
}
这就是我在 javascript 中接收此事件的方式:
import {NativeEventEmitter, NativeModules} from 'react-native';
class NewFriendReceiver extends React.Component {
componentDidMount() {
const eventEmitter = new NativeEventEmitter(NativeModules.ToastExample);
this.eventListener = eventEmitter.addListener('NewFriend', event => {
console.log(event.eventProperty); // "someValue"
});
}
componentWillUnmount() {
this.eventListener.remove(); //Removes the listener
}
}
我究竟做错了什么?为什么当我点击 android 链接时我的应用程序会崩溃?它与我如何使用反应上下文有什么关系吗?