【问题标题】:Android Broadcast receiver not executed on application closeAndroid广播接收器未在应用程序关闭时执行
【发布时间】:2013-12-14 21:46:05
【问题描述】:

我有一个 android 应用程序,我在其中安排一个事件(位置更新),以便在将来使用警报管理器执行。只要应用程序在前台或后台运行,计划的事件就会按预期执行。但是一旦我在任务管理器下强制关闭应用程序,或者当应用程序在后台时由于内存问题而导致android系统终止应用程序时,我将不再能够接收来自警报管理器的广播。

正如我尝试使用的各种帖子和博客所建议的那样 1) Intent.Flag_Include_Stopped_Packages 2) 清单中的接收者 android:process=":remote" 3) 清单中的接收器 android:exported="true"

服务中:

Intent locationIntent = new Intent("com.dummy.intent");  
locationIntent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
locationIntent.putExtra(LocationLibraryConstants.LOCATION_BROADCAST_EXTRA_LOCATIONINFO, locationInfo);
context.sendBroadcast(locationIntent, "android.permission.ACCESS_FINE_LOCATION");

在清单中:

<receiver android:name=".NearestStationBroadcastReceiver" android:enabled="true"
  android:exported="true" 
  android:process=":remote">
    <intent-filter>
        <action android:name="com.dummy.intent" />
    </intent-filter>
</receiver>

有人可以帮帮我吗?

【问题讨论】:

    标签: android broadcastreceiver intentfilter


    【解决方案1】:

    但是,一旦我在任务管理器下强制关闭应用程序,或者当应用程序在后台时由于内存问题而导致android系统终止应用程序时,我将无法再接收来自警报管理器的广播。

    这些彼此无关,所以如果你一直在使用强制停止模拟“当 android 系统由于内存问题而杀死应用程序时”,那就是你的问题。已通过“设置”强制停止的应用程序已删除其警报等。模拟您的进程被终止的更好方法是从 DDMS 中终止它。

    1) Intent.Flag_Include_Stopped_Packages 2) 清单中的接收者 android:process=":remote" 3) 清单中的接收者 android:exported="true"

    这些都与您的问题无关,并且android:exported="true"(以及您对&lt;intent-filter&gt; 的使用)会引发安全问题,因为现在任何人都可以出于任何原因随时导致您的BroadcastReceiver 运行。

    Here is a sample application 成功处理警报事件,即使该进程已被 DDMS 终止。

    【讨论】:

    • 感谢您的回答。
    • 但我没有在模拟器上模拟这种情况。我正在实际设备上安装应用程序。在我启动监听位置警报并且几分钟后当我打开其他几个应用程序时应用程序进入非活动状态(通过打开其他应用程序)时,android系统会从后台停止我的位置应用程序。然后在警报间隔服务重新启动并发送位置更新信息的意图。但是应用清单中定义的广播接收器不会触发。当应用程序在后台可用时,上述操作非常有效。希望你明白我的意思。
    • 非常感谢您分享示例,这几天一直在努力解决这个问题,感谢您节省了我的一天!
    • 虽然不相关,但是我在使用相同的接收器类来处理不同的警报时遇到了 intent.getStringExtra 的问题,如果我使用不同的类没有问题,发生了一些愚蠢的事情,但我最终添加了更多接收器类
    【解决方案2】:

    您必须在手机的“Android 设置”>“受保护的应用程序”部分中添加您的应用程序。这使用户可以控制哪些应用程序允许在后台运行。

    您还可以编写一个服务来收听位置广播,如果您获得必要的权限,它将在后台运行而不会出现问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多