我创建了一个OnBootRecoverReceiver,它在收到来自android的BOOT_COMPLETED意图后启动服务 - 到目前为止工作得很好......但是在一些(但不可追踪)事件中我收到了这样的意图,即使根本没有重启
任何人都有这方面的线索,或之前遇到过同样的问题?
接收者的清单条目:
<receiver android:name=".trigger.OnBootRecoverReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.HOME" />
</intent-filter>
</receiver>`
接收人代码:
public class OnBootRecoverReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent serviceIntent = new Intent();
serviceIntent.setAction("de.android.stuff.trigger.OnBootRecoverService");
context.startService(serviceIntent);
}
}
如果有人有想法,请随时提供帮助。
答案 0 :(得分:0)
要清除这里:在任何地方都没有创建BOOT_COMPLETED意图
由于某种原因,服务(接收器的启动)不久前在特定设备上崩溃了。我们的好朋友android ActivityManager然后决定重新制作所述服务的动画:
03-16 12:00:02.239: WARN/ActivityManager(2504): Scheduling restart of crashed service de.ukn.hci.android.diary/.trigger.OnBootRecoverService in 5000ms
当然这让我觉得Recevier再次被解雇了,但是 - 事实证明只有服务重新启动。没有任何REBOOT意图。
解决方案停止此操作: 为接收器创建的意图添加布尔额外
serviceIntent.putExtra("isFromReceiver", true);
context.startService(serviceIntent);
然后在服务的onStart(Intent)中检查此布尔值Extra
boolean isFromReceiver = intent.getBooleanExtra("isFromReceiver", false);
if( !isFromReceiver ) {
return; //just stop starting the service
}