Делаю будильник на Андроид. В общем сохраняю будильники в БД. При каждом запуске будильника нахожу самый ранний и ставлю его. Intent из PendingIntent падает в Receiver и там вызывает Activity. Проблема в том, что будильник успешно ставиться на 5, 10, 15, 30 минут, а на час если поставить, то вылетает ошибка. Логи ошибок я в таком случае посмотреть не могу. Подскажите, в чём тут может быть дело? В какую сторону копать?
Телефон не перезагружаю.
Код метода постановки будильника:
Код: Выделить всё
public static void setAlarm(Context ctx) {
DB db = new DB(ctx);
db.open();
if (db.isRunningClock()) {
ClockEvent event = db.getNextClock(); //получение самого раннего будильника
Log.d(LOG, "setAlarm id = " + event.getId());
//if (event == null) return;
AlarmManager am = (AlarmManager) ctx.getSystemService(ALARM_SERVICE);
Intent intent = new Intent(ctx, Receiver.class);
intent.setAction("" + event.getTime());
intent.putExtra("HOUR", event.getHour());
intent.putExtra("MINUTE", event.getMinute());
intent.putExtra("TIME", event.getRingTime());
int[] massRepeat = new int[event.getRepeat().size()];
for (int i = 0; i <massRepeat.length; i++) {
massRepeat[i] = event.getRepeat().get(i);
}
intent.putExtra("REPEAT", massRepeat);
intent.putExtra("ID", event.getId());
PendingIntent pIntent = PendingIntent.getBroadcast(ctx, 0, intent,
PendingIntent.FLAG_CANCEL_CURRENT);
Calendar nowTime = new GregorianCalendar();
Calendar clockTime = new GregorianCalendar();
clockTime.set(Calendar.HOUR_OF_DAY, event.getHour());
clockTime.set(Calendar.MINUTE, event.getMinute());
clockTime.set(Calendar.SECOND, 0);
if (clockTime.getTimeInMillis() < nowTime.getTimeInMillis()) {
clockTime.add(Calendar.DAY_OF_YEAR, 1);
}
Log.d(LOG,
clockTime.get(Calendar.HOUR_OF_DAY) + ":"
+ clockTime.get(Calendar.MINUTE) + " " +
clockTime.get(Calendar.DAY_OF_YEAR) + "/" +
clockTime.get(Calendar.MONTH) + "/" +
clockTime.get(Calendar.YEAR));
am.set(AlarmManager.RTC_WAKEUP,
clockTime.getTimeInMillis(),
pIntent);
} else {
db.close();
return;
}
db.close();
}