我正在实现一个带有Intent的AlarmManager,它尝试每30分钟连接一台服务器,直到服务器返回200.
if (resultCode != 200){
alarmMgr = (AlarmManager) ApplicationContextProvider.getContext().getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(ApplicationContextProvider.getContext(), MAUAlarmReceiver.class);
alarmIntent = PendingIntent.getBroadcast(ApplicationContextProvider.getContext(), 0, intent, 0);
alarmMgr.setInexactRepeating(AlarmManager.ELAPSED_REALTIME,SystemClock.elapsedRealtime() + AlarmManager.INTERVAL_HALF_HOUR, AlarmManager.INTERVAL_HALF_HOUR, alarmIntent);
}
当服务器返回200时,使用以下代码停止警报:
if (resultCode == 200){
if (alarmMgr!= null) {
alarmMgr.cancel(alarmIntent);
}
}
问题是,如果此警报存活了几个小时,然后,服务器返回200,当它试图取消警报时,alarmMgr变量为" null"因为它是由操作系统清理的。然后,每30分钟调用一次警报,而不是取消。在这种情况下,如何取消闹钟?
谢谢。
答案 0 :(得分:0)
不要缓存AlarmManager对象。有一些方法可以使用警报ID来检索相同的警报,在这种情况下,您使用0作为其ID。
您可以使用以下代码检索相同的警报,并可以对其进行取消。
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(ApplicationContextProvider.getContext(), MAUAlarmReceiver.class);
PendingIntent alarmIntent = PendingIntent.getBroadcast(ApplicationContextProvider.getContext(), 0, intent, 0);
alarmManager.cancel(pendingIntent);