我的应用程序为特定时间安排多个警报。这些警报是在应用程序启动时安排的。(每天有5个警报,导致每周有35个警报)。。。
我已经通过日志验证了这些警报是在应用程序启动时安排的。
问题是,当我开始测试我的应用程序时,7个警报都很好。然而,第8次警报没有响起。我已经通过保持设备静止1天以上来测试这种情况。我如何调试这种行为,以及阻止警报触发的可能原因是什么。
编辑:
调度代码:
try {
if (info != null) {
Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, year);
c.set(Calendar.MONTH, month);
c.set(Calendar.DAY_OF_MONTH, day);
c.set(Calendar.HOUR_OF_DAY, info.getHour());
c.set(Calendar.MINUTE, info.getMinute());
c.set(Calendar.SECOND, 0);
Intent intent = new Intent(context, AlarmReceiverActivity.class);
intent.putExtra("name", info.getPrayerName());
intent.putExtra("sound", soundType);
intent.putExtra("time", formatTimeClock(context, info.getHour(), info.getMinute()));
PendingIntent pendingIntent = PendingIntent.getActivity(context, alarmId, intent, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pendingIntent);
}
} catch (Exception e) {
Log.e("ALarmSchedularManager", e.getMessage());
}
我如何调试这种行为
使用adb shell dumpsys alarm
查看您的计划报警是什么以及下一次调用它们的时间。
阻止报警的可能原因是什么
您的代码没有考虑到时间已经过去的可能性,尽管这可能在上面显示的代码片段之外处理。
希望下面的代码能有所帮助,我在应用程序中也使用了同样的代码。在这里,AlarmManager类中传递的用于重复的参数应该是24*60*60*1000
AlarmManager am = (AlarmManager) ct.getSystemService(Context.ALARM_SERVICE);
Intent intent1 = new Intent(ct, TimeAlarm.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(ct, 0,intent1, PendingIntent.FLAG_CANCEL_CURRENT);
Date curr=new Date();
curr.setHours(h);
curr.setMinutes(m);
c.setTime(curr);
c.set(Calendar.SECOND, 0);
Calendar c1 = Calendar.getInstance();
am.setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(),24*60*60*1000, pendingIntent);
您可以使用AlarmManager.INTERVAL_DAY来代替硬代码操作(24*60*60*1000)。请检查此项以了解最长为1天的不同间隔http://developer.android.com/reference/android/app/AlarmManager.html#INTERVAL_DAY