活动重启后,挂起的意图为空

时间:2012-08-07 02:18:59

标签: android null alarmmanager android-pendingintent

我正在创建一个使用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()中创建待处理的意图,这可以解决这个问题,但是我将无法再次启动警报,因为待处理的意图被取消并需要再次重新创建(我认为,除非有办法检查意图被取消,我不知道)

1 个答案:

答案 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);

}