我使用AlarmManager制作了一个Android应用程序,它工作正常但是当我使用cancel()来取消警报时它不能正常工作并且警报继续工作!!
这里发出警报:
private void setAlarm(Intent intentArg, int intentUnqId, int year, int month, int day, int hour, int minute, boolean repeatAlarm)
{
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, intentUnqId, intentArg, PendingIntent.FLAG_ONE_SHOT);
SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss ");
Log.v("app", "Time is " + format.format(calendar.getTime()));
AlarmManager alarmMngr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmMngr.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
if (repeatAlarm == true)
{
alarmMngr.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 2 * 60 * 1000/*AlarmManager.INTERVAL_FIFTEEN_MINUTES*/, pendingIntent);
}
}
这是取消警报:
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, intentID, intentArg, 0);
AlarmManager alarmMngr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmMngr.cancel(pendingIntent);
答案 0 :(得分:0)
您需要使用AlarmManager中的方法cancel(...),使用您用于设置闹钟的相同PendingIntent。例如:
this.getAlarmManager().cancel(mAlarmPendingIntent);
(这是指您取消闹钟的活动或服务)。
将PendingIntent创建为:
mAlarmPendingIntent = PendingIntent.getActivity(this, requestCode, intent, flags);
你也可以参考这个链接来做这件事 http://smallbusiness.chron.com/cancel-android-alarm-44758.html
答案 1 :(得分:0)
用于设置闹钟的意图应与用于取消闹钟的意图相匹配。
根据public boolean filterEquals (Intent other)
完成意图匹配用于pendingIntent
cancel()
使用PendingIntent.FLAG_CANCEL_CURRENT
标志代替0
。
答案 2 :(得分:0)
您传递给PendingIntent
以取消警报的id参数与传递给PendingIntent
的{{1}}首先传递给的{id}参数不同。