我目前正在开发一个使用IntentService的应用程序,该应用程序做了一些工作,然后设置了一个PendingIntent以在某个指定时间唤醒自己。
我的问题是,如果进程被杀死,则不会调用相应的静态广播接收器,但如果我 - 例如 -在我的清单的意图过滤器中设置“android.intent.action.AIRPLANE_MODE” ,它会被调用。
为了杀死应用程序,我长按了 HTC Desire 的后退按钮(2.3.7 CyanogenMod 7.2.0.1);)
这是我的清单:
<receiver
android:name="com.jdev.myapp.service.MyReceiver"
android:exported="false" >
<intent-filter> <action android:name="android.intent.action.AIRPLANE_MODE" /> </intent-filter>
//Just Used as an example
<intent-filter> <action android:name="com.jdev.myapp.REINITIALIZATION" /> </intent-filter>
<intent-filter> <action android:name="com.jdev.myapp.PROFILE_ENGAGED" /> </intent-filter>
<intent-filter> <action android:name="com.jdev.myapp.PROFILE_DISENGAGED" /> </intent-filter>
//Some more custom Actions here
<intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter>
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REPLACED" />
<data
android:path="com.jdev.myapp"
android:scheme="package" />
</intent-filter>
</receiver>
我像这样创建我的 PendingIntents:
int Id;
Intent engaged = new Intent(Constants.PROFILE_ENGAGED);
//put some Extra
PendingIntent pi = PendingIntent.getBroadcast(getBaseContext(), Id, engaged, PendingIntent.FLAG_UPDATE_CURRENT);
之后,我使用 AlarmManager 在计算的时间设置它...
只要进程还活着,整个应用程序就可以很好地工作。但是如果进程被杀死 - 这实际上不应该是一个问题,因为 BroadcastReceiver 只需再次启动服务,接收器就不会被调用,但正如上面提到的那样,系统的东西像"android.intent.action.AIRPLANE_MODE"。
根据文档,它实际上应该可以工作:
PendingIntent 本身只是对系统维护的令牌的引用,该令牌描述了用于检索它的原始数据。这意味着,即使它拥有的应用程序的进程被杀死,PendingIntent 本身仍可用于其他已给予它的进程。如果创建应用程序稍后重新检索相同类型的 PendingIntent(相同的操作、相同的 Intent 操作、数据、类别和组件以及相同的标志),它将接收表示相同令牌的 PendingIntent,如果它仍然有效,并且可以因此调用 cancel() 将其删除。
http://developer.android.com/reference/android/app/PendingIntent.html
有人可以解决我的问题吗?