React Native:使用AlarmManager

时间:2016-09-09 20:06:42

标签: javascript android react-native alarmmanager native-module

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

1 个答案:

答案 0 :(得分:3)

查看transistoroft github帐户

具体做法是:

我已经取得了一些成功。

然而,他们都有自己的缺点。到目前为止,我还没有找到一个在后台运行JS的程序包。 RN团队应该正在努力,但还没有。

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