My application schedules multiple alarms for particular times. These alarms are scheduled when the application starts. (For each day there are 5 alarms resulting in 35 alarms per week)...

I have verified through logs that these alarms are scheduled when the application starts.

The problem is when I started testing my application the 7 alarms goes off perfectly fine. However the 8th alarm doesn't fired. I have tested this scenario by keeping my device still for more than 1 day. How can I debug this behaviour and what are the possible reasons that prevent alarm for firing.

Edit:

Code for scheduling:

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());
}
有帮助吗?

解决方案

How can I debug this behaviour

Use adb shell dumpsys alarm to see what your scheduled alarms are and when they are next to be invoked.

what are the possible reasons that prevent alarm for firing

Your code does not appear take into account the possibility that the time has already passed, though that may be handled outside the code snippet you show above.

其他提示

Hopefully below code will help, I used the same in my app. Here the argument passed in AlarmManager class for repeating should be 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);

instead of hard code manipulation (24*60*60*1000) you can use AlarmManager.INTERVAL_DAY. Check this for different interval upto 1 day http://developer.android.com/reference/android/app/AlarmManager.html#INTERVAL_DAY

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top