在没有activity运行的情况下,为在后台运行服务,需要想一个办法启动它。可以使用AlarmManager,AlarmManager是可以发送Intent的系统服务。
那么如何告诉AlarmManager想要发送的intent呢?可以使用PendingIntent。使用PendingIntent打包一个intent,然后将其发送给AlarmManager。
启动定时器的方法应该是一个静态方法。这样,定时器代码和与之相关的代码就可以放在一起,同时其他系统部件还能调用它。
public static void setServiceAlarm(Context context, boolean isOn) {
Intent i = PollService.newIntent(context);
PendingIntent pi = PendingIntent.getService(context, 0, i, 0);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
if (isOn) {
alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME,
SystemClock.elapsedRealtime(), TimeUnit.MINUTES.toMillis(1), pi);
} else {
alarmManager.cancel(pi);
pi.cancel();
}
}