使用cancel()从AlarmManager删除警报-Android

我试图用两种不同的方法创建和删除警报,这两种方法在应用程序逻辑中的不同时刻都被调用。


但是,当我调用AlarmManager的cancel()方法时,不会删除警报。


这是我的addAlarm()方法:


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


Intent intent = new Intent(PROX_ALERT_INTENT);

intent.putExtra("ALERT_TIME", alert.date);

intent.putExtra("ID_ALERT", alert.idAlert);

intent.putExtra("TITLE", alert.title);

intent.putExtra("GEO_LOC", alert.isGeoLoc);

PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext,

        alert.idAlert, intent, PendingIntent.FLAG_CANCEL_CURRENT);


Calendar calendar = Calendar.getInstance();

calendar.setTime(alert.date);

alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);

Log.e("ADD ALERT - WithoutGeoLoc - ",alert.toString());

这是我的deleteAlarm()方法:


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


Intent intent = new Intent(PROX_ALERT_INTENT);

intent.putExtra("ALERT_TIME", alert.date);

intent.putExtra("ID_ALERT", alert.idAlert);

intent.putExtra("TITLE", alert.title);

intent.putExtra("GEO_LOC", alert.isGeoLoc);

PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext,

        alert.idAlert, intent, PendingIntent.FLAG_CANCEL_CURRENT);


alarmManager.cancel(pendingIntent);

Log.e(TAG,"REMOVE ALERT - without GeoLoc"+alert.toString());

这是我的Logcat:


01-23 17:44:07.411: E/ADD ALERT - WithoutGeoLoc -(18789): Alert [latitude=0.0, longitude=0.0, title=bfwu, comments=null, address=null, currency=hrk, idAlert=1, date=Sat Feb 23 17:44:04 CET 2013, isGeoLoc=null]

01-23 17:44:13.032: E/REMOVE ALERT without GeoLoc - (18789): Alert [latitude=0.0, longitude=0.0, title=bfwu, comments=null, address=null, currency=hrk, idAlert=1, date=Sat Feb 23 17:44:04 CET 2013, isGeoLoc=null]

几个注意事项:


RTC_WAKEUP #47 是我的原始警报

RTC_WAKEUP #48 是应该覆盖#47而不是创建新警报的新警报。

我使用filterEquals()返回的true...的Intent 方法比较了我的add和delete方法中的两个intent(不是前瞻性Intents),但是没有删除警报。我究竟做错了什么?

繁华开满天机
浏览 1066回答 3
3回答

qq_遁去的一_1

试试这个标志:PendingIntent.FLAG_UPDATE_CURRENT代替:PendingIntent.FLAG_CANCEL_CURRENT 因此,PendingIntent将如下所示:PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext,         alert.idAlert, intent, PendingIntent.FLAG_UPDATE_CURRENT)  (确保使用相同的alert对象和mContext!)旁注:如果要一个全局AlarmManager,请将AlarmManager放在静态变量中(并且仅在时将其初始化null)。

慕田峪9158850

在设置的任何特定时间从警报管理器中取消警报:Intent intent = new Intent(context, AlarmReceiver.class);PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);AlarmManager am = (AlarmManager) context.getSystemService(ALARM_SERVICE);am.cancel(pendingIntent);
打开App,查看更多内容
随时随地看视频慕课网APP