当设备启动时,您将需要设置启动您的服务警报(它会间歇唤醒并确保您的服务正在运行)的启动接收器。警报接收器应该每分钟醒来(或多次)以查看您的服务未被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