我需要在 MainActivity 的 onCreate 函数中通过以下方式调用本地模块:context.getNativeModule(RNBackgroundToForegroundServiceModule.class)
但是我不确定如何在那里获取当前的 ReactContext。
我尝试使用 (ReactContext) getApplicationContext() 但它会崩溃。
如何获取有效的 ReactContext?
我需要在 MainActivity 的 onCreate 函数中通过以下方式调用本地模块:context.getNativeModule(RNBackgroundToForegroundServiceModule.class)
但是我不确定如何在那里获取当前的 ReactContext。
我尝试使用 (ReactContext) getApplicationContext() 但它会崩溃。
如何获取有效的 ReactContext?
I came up with the right answer myself.
We have to wait until the Javascript bundle is loaded.
ReactInstanceManager mReactInstanceManager = getReactNativeHost().getReactInstanceManager();
ReactApplicationContext context = (ReactApplicationContext) mReactInstanceManager.getCurrentReactContext();
mReactInstanceManager.addReactInstanceEventListener(new ReactInstanceManager.ReactInstanceEventListener() {
public void onReactContextInitialized(ReactContext validContext) {
// Use validContext here
}
});
在你的ReactActivity中使用以下代码:
getReactNativeHost().getReactInstanceManager().getCurrentReactContext();
请确保在您的Application类中实现了ReactApplication接口。
重要提示:
由于存在UI线程和JS线程,因此需要时间来使ReactContext可用,所以在'onCreate'方法中可以使用一个延迟1秒的Handler,ReactContext应该会变得可用:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
ReactContext reactContext = getReactNativeHost().getReactInstanceManager().getCurrentReactContext();
}
}, 1000);
}
但我建议您从ReactContextBaseJavaModule中完成您的任务,因为在创建时提供了上下文...
使用答案4,这个对我起作用了。
mReactInstanceManager.addReactInstanceEventListener(new ReactInstanceManager.ReactInstanceEventListener() {
public void onReactContextInitialized(ReactContext validContext) {
// Use validContext here
WritableMap params = Arguments.createMap();
sendEvent(validContext, "appStateChange", params);
}
});
onCreate中它是空的。 - ValeriReactContextBaseJavaModule的模块中,我无法收到ACTION_SEND意图,它总是获取VIEW。如何才能获得ACTION_SEND? - JaredManifest文件中的Activity的<intent-filter>中添加了<action android:name="android.intent.action.SEND" />吗? - HedeH