我需要通过MainActivity
context.getNativeModule(RNBackgroundToForegroundServiceModule.class)
的onCreate函数中调用本机模块
但我不知道如何获得当前的ReactContext
。
我尝试使用(ReactContext) getApplicationContext()
但它崩溃了。
如何获得有效的ReactContext
?
答案 0 :(得分:4)
我自己想出了正确的答案 我们必须等到加载Javascript包。
ReactInstanceManager mReactInstanceManager = getReactNativeHost().getReactInstanceManager();
ReactApplicationContext context = (ReactApplicationContext) mReactInstanceManager.getCurrentReactContext();
mReactInstanceManager.addReactInstanceEventListener(new ReactInstanceManager.ReactInstanceEventListener() {
public void onReactContextInitialized(ReactContext validContext) {
// Use validContext here
}
});
答案 1 :(得分:3)
在ReactActivity中使用它:
getReactNativeHost().getReactInstanceManager().getCurrentReactContext();
确保在Application类中实现 ReactApplication 。
重要:强>
ReactContext需要一段时间才能使用,因为有UI线程和JS线程,所以在' onCreate'例如,您可以使用延迟为1秒的处理程序,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做你的东西,在创建时提供上下文......
答案 2 :(得分:0)
这对我来说是答案4
mReactInstanceManager.addReactInstanceEventListener(new ReactInstanceManager.ReactInstanceEventListener() {
public void onReactContextInitialized(ReactContext validContext) {
// Use validContext here
WritableMap params = Arguments.createMap();
sendEvent(validContext, "appStateChange", params);
}
});