2

我正在寻找某种方法来从 Java Native Module 执行 JS 代码。我找到了Timer的解决方案,但它使用 Callbacks 并且仅在应用程序处于后台时才有效(React-native 后台进程(android)处理?)。

我正在使用AlarmManager来唤醒 Java 的 BroadcastReceiver,但我不知道如何从这一点上运行 Javascript 代码。此代码不是 React 组件,但它使用了一些 react sdk 和模块(facebooksdk、googlesdk、Keychain、Asyncstorage)。

我试图在DeviceEventEmitter上创建侦听器(由于https://facebook.github.io/react-native/docs/native-modules-android.html)并在BroadcastReceiver中运行类似

public class Alarm extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {

    ReactApplicationContext contxt = (ReactApplicationContext) context;
    contxt.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
    .emit("runTask", null);

}

但我已经投了运行时错误:

Caused by: java.lang.ClassCastException: android.app.ReceiverRestrictedContext cannot be cast to com.facebook.react.bridge.ReactApplicationContext

也许不可能在后台从 Java 模块运行 JS,尤其是在应用程序关闭时。欢迎任何提示。

4

1 回答 1

3

查看晶体管的 github 帐户

具体来说:

我在这些方面取得了一些成功。

但是,它们都有其缺点。到目前为止,我还没有找到在后台实际运行 JS 的包。RN 团队应该正在研究它,但还没有。

在这种情况下,解决方案是编写您需要在 java 后台运行的任何内容。最终这就是我所做的。

于 2016-10-03T13:49:51.417 回答