Я хочу следующее:
Вот как я это сделал:
В моем подклассе AppWidgetProvider:
@Override
public void onEnabled(Context context) {
super.onEnabled(context);
Log.d(LOG_TAG, "Widget Provider enabled. Starting timer");
//Setting the Calender object to midnight time.
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 0);
calendar.add(Calendar.MINUTE, 0);
calendar.add(Calendar.HOUR, 0);
//The fired Intent
Intent intent = new Intent(CLOCK_WIDGET_UPDATE); //custom intent name
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(), 1000*60*60*24, pendingIntent);
}
Хотя я думаю, что сделал все правильно, этот код не работает!
Чтобы проверить его, я изменил 1000 * 60 * 60 * 24 с 10000 (10 секунд) и обновил textView в виджет со случайным числом. Случайное число никогда не менялось.
Любая помощь будет оценена!
Я, наконец, нашел проблему!
Кажется, мне нужно также установить значение AM_PM
. Когда я печатаю календарь, используя getTime().toLocaleString()
, он был установлен на следующий день, но через 12 часов (12:00:00 PM).
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.HOUR, 0);
calendar.set(Calendar.AM_PM, Calendar.AM);
calendar.add(Calendar.DAY_OF_MONTH, 1);
Это идеальная настройка для экземпляра Calender, который установит будильник на следующий день в полночь (т.е. в ближайшую полночь). Вы просто передаете его setRepeating()
.
Благодаря @CommonsWare
Во-первых, то, что вы хотите, невозможно. Android не RTOS; вы не можете получить контроль "в полночь ТОЧНО"
Во-вторых, ваш объект Calendar
представляет собой время в прошлом (если это не будет полночь в то время, когда вы выполняете этот код, и в этом случае он представляет настоящее). Попробуйте время начала в будущем.
add
неset
. Итак, если это так, я должен установитьSET Hour, Min and Sec to zero and ADD 1 to DAY_OF_MONTH
?set()
. «если это так, я должен…» - да, для полуночи это должно сработать, чтобы дать вам завтрашнюю полночь.