警报管理器取消不工作Android

CHI*_*HAN 2 android

我已经创建了一个警报管理器,用于预约提醒和工作正常.但是当我想要取消闹钟时,它仍会按时发射.警报取消无效.以下是设置和取消警报的代码.谢谢

设置警报管理器的代码

AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);    
Intent notificationIntent = new Intent("android.media.action.APPOINTMENT_REMINDER_NOTIFICATION");
notificationIntent.putExtra("APPOINTMENT_TIME", date);
notificationIntent.putExtra("APPOINTMENT_ID", appointment_id);
notificationIntent.addCategory("android.intent.category.DEFAULT");    
PendingIntent broadcast = PendingIntent.getBroadcast(context, 100, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);    
Calendar cal = Calendar.getInstance();
cal.add(Calendar.SECOND, time_remaining);
alarmManager.setExact(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), broadcast);
Run Code Online (Sandbox Code Playgroud)

取消警报

Intent intent = new Intent("android.media.action.APPOINTMENT_REMINDER_NOTIFICATION");
//PendingIntent.getBroadcast(context, 100, intent, PendingIntent.FLAG_UPDATE_CURRENT).cancel();
//Intent intent = new Intent(context, AlarmReceiver.class);
//alarmManager.cancel(PendingIntent.getService(context, 100, intent, 0));    
PendingIntent pIntent = PendingIntent.getBroadcast(context, 100, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(pIntent);
pIntent.cancel();
Run Code Online (Sandbox Code Playgroud)

Par*_* P. 6

使用时要记住的第一件事alammanager是 - 在创建和取消警报时
必须使用相同context的东西.

这包括它们的动作,数据,类型,类和类别是相同的.这不会比较意图中包含的任何额外数据.

在这种情况下,您可以使用getApplicationContext()简单的方法.所以下面的代码应该工作 -

设置闹钟 -

AlarmManager alarmManager = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
Intent notificationIntent = new Intent("android.media.action.APPOINTMENT_REMINDER_NOTIFICATION");
notificationIntent.putExtra("APPOINTMENT_TIME", date);
notificationIntent.putExtra("APPOINTMENT_ID", appointment_id);
notificationIntent.addCategory("android.intent.category.DEFAULT");
PendingIntent broadcast = PendingIntent.getBroadcast(getApplicationContext(), 100, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);

Calendar cal = Calendar.getInstance();
cal.add(Calendar.SECOND, time_remaining);
alarmManager.setExact(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), broadcast);
Run Code Online (Sandbox Code Playgroud)

取消闹钟 -

PendingIntent pIntent = PendingIntent.getBroadcast(getApplicationContext(), 100, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(pIntent);
Run Code Online (Sandbox Code Playgroud)