android - AlarmManager 警报未被删除/取消。我究竟做错了什么?

标签 android alarmmanager

我使用 AlarmManager + NotificationManager 在特定时间显示通知。但是,我无法完全用我的代码取消警报。即使我删除了警报,通知/警报仍然会被触发。有人可以查看我的代码并检查我是否做错了什么?非常感谢! :)

这就是我设置闹钟/通知的方式:

Intent intent = new Intent(this, ViewLocalReminders.class);
startActivity(intent);

//Get the primary key of the reminder that has just been saved.
Cursor cursor = remindersDAO.reminderNotification(this);
cursor.moveToLast();
int reminderIdColumnIndex = cursor.getColumnIndex("_id");
reminderPrimaryKey = cursor.getInt(reminderIdColumnIndex);

//Get the name of the reminder that has just been saved.
cursor.moveToLast();
int reminderNameColumnIndex = cursor.getColumnIndex("name");
reminderName = cursor.getString(reminderNameColumnIndex);

cursor.close();

Toast toast = Toast.makeText(context, context.getString(R.string.reminder_saved), Toast.LENGTH_LONG);
toast.show();

c.set(mYear, mMonth, mDay); //Set the notification date.
c.set(Calendar.HOUR_OF_DAY, pHour); //Set the notification hour.
c.set(Calendar.MINUTE, pMinute); //Set the notification minute.
c.set(Calendar.SECOND, 0); //Set the notification second (always 0).

//Use AlarmManager to trigger the notification/alarm.
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

//PendingIntent to launch activity when the alarm triggers.                    
Intent i = new Intent("com.utilityapps.Blah.DisplayReminderNotification");

//Assign the reminder's primary key as the notification ID.
i.putExtra("Reminder_Name", editRemindMeTo.getText().toString());
i.putExtra("Reminder_Primary_Key", reminderPrimaryKey);

PendingIntent displayIntent = PendingIntent.getActivity(getBaseContext(), reminderPrimaryKey, i, 0);               

//Set the alarm to trigger.
alarmManager.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), displayIntent);

这就是我取消闹钟/通知的方式:

Intent i = new Intent("com.utilityapps.Blah.DisplayReminderNotification");
PendingIntent displayIntent = PendingIntent.getService(context, (int) reminderID, i, PendingIntent.FLAG_CANCEL_CURRENT);

AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 

alarmManager.cancel(displayIntent);
displayIntent.cancel();

那么我的代码中是否需要更改一些内容才能使其正常工作?谢谢! :D

最佳答案

设置和取消闹钟时您的待处理 Intent 不同。为两者创建相同的待处理 Intent 。希望它能起作用。

取消闹钟

AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

Intent i = new Intent("com.utilityapps.Blah.DisplayReminderNotification");

PendingIntent displayIntent = PendingIntent.getActivity(getBaseContext(), reminderPrimaryKey, i, 0);               

alarmManager.cancel(displayIntent);

关于android - AlarmManager 警报未被删除/取消。我究竟做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12633441/

相关文章:

android - Parcelable遇到IOException写入可序列化对象: java. io.NotSerializableException : org. json.JSONArray

Android 房间数据库表未更新

android - ionic build android failure - 任务 processDebugResources 执行失败

java - 如何让虚拟键盘消失?

android - 每天第一次运行命令/服务

android - AlarmManager 过早触发 PendingIntent

android - 从 Sqlite 设置多个警报

java - 状态栏中的通知图标在少数 Android 设备中没有变化

java - WorkManager 一次执行 enqueueUniquePeriodicWork() 多次?

android - 我希望在打开应用程序后关闭通知