我正在寻找一些从Java Native Module执行JS代码的方法。我找到了计时器的解决方案,但它使用了回调功能,只有在应用程序处于后台(React-native background process(android) handling?)时才有效。
我使用 AlarmManager 来唤醒Java的BroadcastReceiver,但我不知道从这一点起如何运行Javascript代码。这段代码不是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,尤其是在应用程序关闭时。欢迎任何提示。
答案 0 :(得分:3)
查看transistoroft github帐户
具体做法是:
我已经取得了一些成功。
然而,他们都有自己的缺点。到目前为止,我还没有找到一个在后台运行JS的程序包。 RN团队应该正在努力,但还没有。
在这种情况下,解决方案是编写您需要在java中的后台运行的任何代码。最终这就是我所做的。