如何在MainActivity的onCreate函数中获取当前的ReactContext?

时间:2018-03-07 14:00:13

标签: android react-native react-native-android

我需要通过MainActivity

context.getNativeModule(RNBackgroundToForegroundServiceModule.class)的onCreate函数中调用本机模块

但我不知道如何获得当前的ReactContext

我尝试使用(ReactContext) getApplicationContext()但它崩溃了。

如何获得有效的ReactContext

3 个答案:

答案 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);
        }
    });