Mik*_*ant 37 android alarm android-pendingintent
我正在尝试使用两种不同的方法创建和删除警报,这两种方法都在应用程序逻辑的不同时刻调用.
但是,当我调用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());
Run Code Online (Sandbox Code Playgroud)
这是我的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());
Run Code Online (Sandbox Code Playgroud)
这是我的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]
Run Code Online (Sandbox Code Playgroud)
这是AlarmManager中pendingIntents的列表
Current Alarm Manager state:
Realtime wakeup (now=2013-01-23 17:44:37):
RTC_WAKEUP #48: Alarm{2c1d0588 type 0 com.my.app}
type=0 when=+364d23h59m33s288ms repeatInterval=0 count=0
operation=PendingIntent{2c0a6cb0: PendingIntentRecord{2c1d04e8 com.my.app broadcastIntent}}
RTC_WAKEUP #47: Alarm{2c2298a0 type 0 com.my.app}
type=0 when=+30d23h59m27s360ms repeatInterval=0 count=0
operation=PendingIntent{2c292af8: PendingIntentRecord{2c22a628 com.my.app broadcastIntent}}
Run Code Online (Sandbox Code Playgroud)
几个笔记:
RTC_WAKEUP #47 是我的原始警报RTC_WAKEUP #48 是一个新的警报应该覆盖#47而不是创建一个新的警报.我使用Intent的filterEquals()方法从我的添加和删除方法中比较了两个意图(不是pendingIntents),返回true...但是警报不会被删除.我究竟做错了什么?
UPDATE
这是我saveAlert()调用addAlarm()和调用的方法deleteAlarm()
private void saveAlert() {
// *** If Modifying Alert => REMOVE OLD ALERT (then add new one)
Intent intent1 = null, intent2 = null;
if (alert.idAlert != null) {
if (alert.isGeoLoc == null || alert.isGeoLoc == false) {
intent2 = ProximityService.removeProximityAlertWithoutGeoLoc(getApplicationContext(), devisesApp.alertsGlobal.getAlertById(alert));
} else {
ProximityService.removeProximityAlert(getApplicationContext(), alert);
}
}
// *** Add Alert
if (alert.isGeoLoc == null || alert.isGeoLoc == false) {
intent1 = ProximityService.addProximityAlertWithoutGeoLoc(getApplicationContext(), alert, devisesApp.alertsGlobal);
} else {
ProximityService.addProximityAlert(getApplicationContext(), alert, devisesApp.alertsGlobal);
}
Log.i(TAG, "[saveAlert] Alert ID : " + alert.idAlert);
devisesApp.alertsGlobal.addById(alert);
Log.i("INTENT EQUALS", intent1.filterEquals(intent2) + ""); // This returns true
}
Run Code Online (Sandbox Code Playgroud)
Gov*_*vil 47
试试这个标志:
PendingIntent.FLAG_UPDATE_CURRENT
Run Code Online (Sandbox Code Playgroud)
代替:
PendingIntent.FLAG_CANCEL_CURRENT
Run Code Online (Sandbox Code Playgroud)
所以PendingIntent看起来像这样:
PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext,
alert.idAlert, intent, PendingIntent.FLAG_UPDATE_CURRENT)
Run Code Online (Sandbox Code Playgroud)
(确保使用相同的alert对象mContext!)
附注:如果您需要一个全局AlarmManager,请将AlarmManager放在一个静态变量中(只有在它的情况下才进行初始化null).
| 归档时间: |
|
| 查看次数: |
58623 次 |
| 最近记录: |