android - 闹钟管理器取消不工作 Android

标签 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);

取消闹钟

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();

最佳答案

使用 alammanager 时首先要记住的是 -
您必须在创建和取消警报时使用相同的上下文

This includes their action, data, type, class, and categories are the same. This does not compare any extra data included in the intents.

在这种情况下,您可以使用 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);

取消闹钟 -

PendingIntent pIntent = PendingIntent.getBroadcast(getApplicationContext(), 100, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(pIntent);

关于android - 闹钟管理器取消不工作 Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46078206/

相关文章:

android - BLE 中的 "reliable write"是什么?

Android Drive api 下载文件

android - 如何使用下载的示例代码启动一个 android 项目

android - 在媒体播放器上播放多首歌曲

java - Android ExpandableListView 不展开/不可点击

android - 添加 OnClickListener 时出现异常

android - 如何安全存储应用程序私有(private)文件?

android - 如何在 android 中使用 Share Intent 在远足应用程序上共享图像和文本

android - 如何跟踪 Gmail 用户的在线状态?

java - 应用程序中有大量数据