我正在创建一个使用AlarmManager.setInexactRepeating()方法的应用程序,该方法将PendingIntent作为参数。
我通过调用setAlarm()方法
来启动它public void setRepeatingAlarm() {
Intent intent = new Intent(this, AlarmReceiver.class);
String url = getAssembledUrl();
intent.putExtra("url", url);
pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), interval, pendingIntent);
}
并通过stopAlarm()
停止它private void stopRepeatingAlarm() {
alarmManager.cancel(pendingIntent);
pendingIntent.cancel();
}
工作得很好。但是,当活动被销毁,并且用户决定停止警报时,显然挂起的intent为null,因为它是在当前活动生命期间未调用的setRepeatingAlarm()方法中创建的。
什么是解决这个问题的正确方法?
我可以在Activity.onCreate()中创建待处理的意图,这可以解决这个问题,但是我将无法再次启动警报,因为待处理的意图被取消并需要再次重新创建(我认为,除非有办法检查意图被取消,我不知道)
答案 0 :(得分:0)
实际上,事实证明
PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
返回相同的待定意图,如果意图相同,那么我需要的只是
private void stopRepeatingAlarm() {
if(pendingIntent == null) {
pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
}
alarmManager.cancel(pendingIntent);
}