我正在寻找某种方法来从 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,尤其是在应用程序关闭时。欢迎任何提示。