当前位置: 首页 > 知识库问答 >
问题:

React Native:使用AlarmManager在后台从Java模块运行JS代码

籍英叡
2023-03-14

我正在寻找从Java本机模块执行JS代码的方法。我找到了使用Timer的解决方案,但它使用回调,并且仅在应用程序处于后台时才有效(React-本机后台进程(android)处理?)。

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

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

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个答案

郏志诚
2023-03-14

查看transistorsoft github帐户

明确地:

  • https://github.com/transistorsoft/react-native-background-fetch

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

然而,它们都有各自的缺点。到目前为止,我还没有找到一个在后台运行JS的包。RN团队本应对此进行研究,但目前还没有任何进展。

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

 类似资料:
  • 问题内容: 我有以下代码行可运行批处理文件, 但是我希望它在后台运行,而不是向用户显示命令行。我该如何更改才能做到这一点? 问题在于命令窗口打开并中断程序GUI。我只希望命令窗口在执行批处理文件时不可见。 问题答案: 完全删除“开始”将完成您想要的操作(因为这就是创建窗口的原因): 我已经对此进行了测试,并且可以正常工作,当然,如果您想与命令提示符进行通信,则必须具有输入和输出流,也不要忘记您的错

  • 获取用户列表 接口 GET https://cloud.minapp.com/userve/v1/miniapp/user-profile/ 参数说明 参数 类型 必填 说明 created_at String N 用户创建的时间,值为时间戳。查询创建时间大于等于 2017-01-01 的用户 created_at__gte=1483228800,查询创建时间小于等于 2017-01-01 的用户

  • 问题内容: 我正在编写一个Java应用程序,我需要在该应用程序的整个生命周期中在后台运行进程。 这是我所拥有的: 因此,基本上我每个都打印出来。 我不确定的事情是如何在应用程序中实现此代码,因为无论我将其放置在何处(使用Runnable),它都会阻止其他代码运行(如预期的那样)。 我用过Runnable,Thread,SwingUtilities,但没有任何效果… 任何帮助将不胜感激 :) 问题答

  • 我有一个简单的java程序,它只是一段代码,可以从数据库中读取并根据某些条件修改数据库的内容。现在,我想要的是这个程序应该在启动时自动启动并在后台静默运行,除非有人从任务管理器中杀死它。我以前从未做过这样的事情,也不知道具体该怎么做。有人能帮我解决这个问题吗?谢谢你...

  • 支持用户组和组集的获取、创建、修改和删除等相关操作。 用户组操作 组集操作 用户组与用户的操作

  • 文件上传 文件操作 文件分类操作