2013-11-28 60 views
4

我有一个android应用程序,我安排将要使用闹钟管理器在将来执行的事件(位置更新)。只要应用程序在前台或后台运行,预定的事件就会按预期执行。但是,一旦我强制关闭任务管理器下的应用程序,或者当Android应用程序处于后台时由于内存问题而终止应用程序时,我不再能够从警报管理器接收广播。安卓广播接收器没有在应用程序关闭时执行

如所建议的通过各种文章和网我使用 1)Intent.Flag_Include_Stopped_Packages 2)接收机机器人尝试:过程=“:远程”清单中 3)接收机机器人:导出=“真”,在清单

在服务:

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> 

可发omeone请帮我一下吗?

回答

3

但是,一旦我强制关闭任务管理器下的应用程序,或者当android系统由于内存问题杀死应用程序时,当应用程序处于后台时,我不再能够从闹钟管理器接收广播。

这些与对方无关,所以如果你一直在模拟“当android系统由于内存问题杀死应用程序”时,使用强制停止,那是你的问题。通过设置强制停止的应用程序除去了其他事件中的警报。模拟正在终止的进程的更好方法是从DDMS终止它。

1)Intent.Flag_Include_Stopped_Packages 2)接收机机器人:过程= “:远程” 清单中的3)接收机机器人:在那些清单

无出口= “真” 相关的问题了和android:exported="true"(以及您对<intent-filter>的使用)会引发安全问题,因为任何人都可以因任何原因随时运行您的BroadcastReceiver

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

+0

感谢您的回答。 – user3047032

+0

但我没有在模拟器上模拟这种情况。我在实际设备上安装应用程序。在我开启了几个应用程序之后,当我开启几个其他应用程序后,开始收听位置警报以及应用程序移至非活动状态(通过打开其他应用程序)时,android系统会停止我的位置应用程序。然后在报警间隔服务重新启动并发送位置更新信息的意图。但是在应用清单中定义的广播接收器不会触发。当应用程序在后台可用时,上述功能完美无缺。希望你明白我的观点。 – user3047032

0

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

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

相关问题