Android:AlarmManager和PendingIntent不会从其他活动中取消

时间:2013-11-20 07:41:28

标签: android alarmmanager android-pendingintent

我想在其他活动中取消并重新创建闹钟。我已经尝试了所有可能的东西,但它没有取消。

我这样开始提醒(在提醒活动中):

        Intent alarmintent = new Intent(Reminder.this, AlarmReceiver.class);
        alarmintent.putExtra("Subject", "a");
        alarmintent.putExtra("Comments", "a");
        int _receiverId = 0;
        try {
            Date dt = new SimpleDateFormat("yyyy-MM-dd hh:mm").parse(time);
             _receiverId = (int) dt.getTime();
            Log.i("current time millis", String.valueOf(_receiverId));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        pIntent = PendingIntent.getBroadcast(this, _receiverId,
                alarmintent, PendingIntent.FLAG_ONE_SHOT);
        reminderAlarm = (AlarmManager) getSystemService(ALARM_SERVICE);
        reminderAlarm.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pIntent);

尝试取消并在其他活动中重新创建:

   Date date;
     try {
     date = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss").parse(editedTime);
     _createId = (int) date.getTime();
     Log.i("current time millis receiver", String.valueOf(_createId));
         } catch (ParseException e1) {
           e1.printStackTrace();
          Log.e("Errors", e1.toString());
        }

    Intent alarmintent = new Intent(Reminder.getReminderContext(),  AlarmReceiver.class);
    alarmintent.putExtra("Subject", "a");
    alarmintent.putExtra("Comments", "a");
    PendingIntent pIntent = PendingIntent.getBroadcast(Reminder.getReminderContext(), _createId, alarmintent, PendingIntent.FLAG_UPDATE_CURRENT);                                           
    AlarmManager reminderAlarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    reminderAlarm.cancel(pIntent);

我确信两个pendingintent ID都是相同的,我正在取消线程内的警报。

我已用于取消闹钟的提醒类上下文已由THE HELP OF THIS ANSWER(#Raul Rene)

创建

所有帮助和建议都很明显。

1 个答案:

答案 0 :(得分:2)

经过多次实验后,我可以通过在适配器类中创建相同的PendingIntent来取消特定的AlarmManager。

我做了什么:我通过the answer of Raul Rene得到了活动背景。对于PendingIntent id,我已将闹钟时间转换为毫秒,并通过SharedPreferences保存。我认为这是一个很好的方法来提醒Ids多个警报或待处理的内容。

最后,我成功地在接收器类中创建了pendingintent,如:

PendingIntent pIntent = PendingIntent.getBroadcast(
Reminder.getReminderContext(),
receiverId,alarmintent,PendingIntent.FLAG_UPDATE_CURRENT);

在Reminder课程中,我还创建了方法和PendingIntent,如:

//for the current context which is going to use in adapter or other class
private static Context mContext

public static Context getReminderContext() {
    return Reminder.mContext;
}


//Reminder Activity PendingIntent  
pIntent = PendingIntent.getBroadcast(Reminder.mContext, _receiverId,
    alarmintent, PendingIntent.FLAG_UPDATE_CURRENT);

感谢David Wasser给了我一个很好的建议。 它的工作正常。