我的闹钟应用使用AlarmManager
来设置闹钟,当我从最近的应用列表中关闭应用时,PendingIntent
被取消时出现问题(偶尔会在KitKat
上发生设备并且几乎经常在Marshmallow
上,即使几分钟前设置了闹钟(因此设备没有睡着)。
以下是我设置闹钟的方法:
Calendar alarmCalendar = getCalendarForDay(day);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(ALARM_SERVICE);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context,
(id * 10000 + day.position), getIntent(context, day.position), FLAG_UPDATE_CURRENT);
long intervalMsec = alarmCalendar.getTimeInMillis();
if (android.os.Build.VERSION.SDK_INT >= 19) {
alarmManager.setExact(AlarmManager.RTC_WAKEUP, intervalMsec, pendingIntent);
} else alarmManager.set(AlarmManager.RTC_WAKEUP, intervalMsec, pendingIntent);
getIntent():
private Intent getIntent(Context context, int dayPosition) {
Intent intent = new Intent(context, AlarmReceiver.class);
intent.putExtra(MainActivity.PACKAGE_NAME + ".alarmId", id);
intent.putExtra(MainActivity.PACKAGE_NAME + ".dayPosition", dayPosition);
return intent;
}
我花了很长时间浏览这个网站并找到了一些解释here和here(基本上说它是正常的,有些制造商只是这样做),但是他们都没有真正帮助过我处理这个问题。尽管如此,我确信可以解决,因为有些应用程序适用于所有设备(例如Timely
和其他流行的闹钟)。
那么有人对这些警报如何实际处理AlarmManager
有任何疑问吗?为什么他们的意图永远不会被取消?