當設備啓動時,您將需要設置啓動您的服務警報(它會間歇喚醒並確保您的服務正在運行)的啓動接收器。警報接收器應該每分鐘醒來(或多次)以查看您的服務未被Android清除(這將不時發生)。
[編輯]
你會想要一個BootReceiver開始你的報警,將是這樣的:
public class BootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
AlarmManager alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
PendingIntent pendingIntent =
PendingIntent.getBroadcast(context, 0, new Intent(context, AlarmReceiver.class), 0);
alarmMgr.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 2000, 60000, pendingIntent);
}
}
而一個alarmReceiver應該是這樣的:
public class AlarmReceiver extends BroadcastReceiver {
private String TAG = "AlarmReceiver";
// onReceive must be very quick and not block, so it just fires up a Service
@Override
public void onReceive(Context context, Intent intent) {
Intent i = new Intent(context, MyLovelyService.class);
PendingIntent.getService(context, 0,i, 0).send();
}
}
和最後這需要進入你的清單:
<receiver android:name=".BootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<receiver android:name=".AlarmReceiver" />
謝謝Dredel。但我的問題是,在應用程序關閉後,服務會自行終止。我怎樣才能防止這個? – dracula
你如何開始服務?如果您的服務是由ALARM(而不是您的應用)啓動的,那麼它將不會以任何方式與您的活動相關聯......我將編輯我的答案以向您展示一個示例... –
我開始了我的服務由startservice命令執行。我會嘗試你的代碼。看起來合乎邏輯。謝謝 ! – dracula