我正在尝试取消特定事件的广播
我有以下代码来设置AlarmManager
done.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i=new Intent(getApplicationContext(),NotificationReciever.class); // go to NotificationReciever
i.putExtra("id",getIntent().getStringExtra("id")); //send id that same id own each item in database
Toast.makeText(getBaseContext(),getIntent().getStringExtra("id"),Toast.LENGTH_SHORT).show();
PendingIntent pendingIntent=PendingIntent.getBroadcast(getApplicationContext(),(int)id,
i,PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager= (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar2.getTimeInMillis(),pendingIntent); //go to other activity must be changed to proper notificaton
Reminder.super.onBackPressed();
}
});
当我想删除AlarmManager ...
时Intent i=new Intent(getApplicationContext(),NotificationReciever.class);
PendingIntent pendingIntent=PendingIntent.getBroadcast(getApplicationContext()
,Integer.parseInt(notesData.getID())
,i
,PendingIntent.FLAG_UPDATE_CURRENT);
pendingIntent.cancel();
AlarmManager alarmManager= (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.cancel(pendingIntent);
但是它不会取消警报器,有什么问题?
看起来您误解了AlarmManager及其工作的概念。我建议您阅读警报经理|与示例一起工作
要回答您的问题 - 要删除预定的警报,您需要删除相应的pendingintent。在创建pendingIntent
时,请始终注意两件事- id-这是唯一标识符
- 标志 - 标志定义待处理意图的行为
要从应用程序中的任何地方取消计划的警报
PendingIntent pendingIntent=PendingIntent.getBroadcast(this,REQUEST_CODE,intent,PendingIntent.FLAG_NO_CREATE);
if (pendingIntent!=null)
alarmManager.cancel(pendingIntent);
使用flag_no_create,如果不存在pendingIntent,它将返回null。如果已经存在,它将返回对现有的pendentIntent的引用。使用flag_no_create取消之前,您还可以确认警报是否已安排。