使用cancel()取消android中的警报

时间:2013-11-27 09:03:45

标签: android

我使用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);

3 个答案:

答案 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}参数不同。