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

10

我需要在 MainActivity 的 onCreate 函数中通过以下方式调用本地模块:context.getNativeModule(RNBackgroundToForegroundServiceModule.class)

但是我不确定如何在那里获取当前的 ReactContext

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

如何获取有效的 ReactContext

3个回答

14

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


9

在你的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中完成您的任务,因为在创建时提供了上下文...


onCreate 中它是空的。 - Valeri
修改了我的回答 - HedeH
在一个扩展ReactContextBaseJavaModule的模块中,我无法收到ACTION_SEND意图,它总是获取VIEW。如何才能获得ACTION_SEND - Jared
你在Manifest文件中的Activity<intent-filter>中添加了<action android:name="android.intent.action.SEND" />吗? - HedeH
@HedeH 是的,我已经添加了那个。 - Jared

-1

使用答案4,这个对我起作用了。

 mReactInstanceManager.addReactInstanceEventListener(new ReactInstanceManager.ReactInstanceEventListener() {
        public void onReactContextInitialized(ReactContext validContext) {
            // Use validContext here
            WritableMap params = Arguments.createMap();
            sendEvent(validContext, "appStateChange", params);
        }
    });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,