Как указано в Android Dev Guide, если вы хотите, чтобы виджет обновлялся чаще, вы должны использовать AlarmManager
для установки будильников, которые не будят устройство.
В принципе: не используйте стандартные механизмы, предоставляемые классом AppWidgetProvider
, и его легко настроить с помощью android: updatePeriodMillis в файле xml.
Прошу прощения, но руководство просто заявляет: "используйте AlarmManager, используйте RTC
или ELAPSED_REALTIME
, ...", но КАК ТОЧНО отправить сообщение об обновлении моего виджета, отсутствует !!!
Может ли кто-нибудь указать код, который мне нужен для формирования PendingIntent
, который имитирует поведение по умолчанию? Я понятия не имею, как получить идентификаторы виджета, какое действие я должен использовать и так далее ... Печально, что руководство разработчика перестает объяснять на этом этапе!
Что нужно в качестве дополнений к какому действию?
В случае, если кому-то интересно, почему я хочу обновлять чаще, чем через 30 минут: мой виджет показывает, когда следующая станция отправляется на станцию. Автобус ходит каждые 20 минут, поэтому у меня есть два варианта: обновлять виджет каждую минуту, отображая время отправления следующего автобуса (это то, что я хочу !!) или, что не очень хорошо, указывать время отправления следующего автобуса. поэтому мне придется обновляться по крайней мере каждые 20 минут!
Теперь: когда устройство спит, конечно, это никогда не должно будить его - так что я понимаю этот раздел в руководстве разработчика, что это правильный способ его реализации; кто-нибудь думает, что я не прав?
Ах, еще одна вещь, которую я хотел бы узнать: если устройство спит, когда виджет должен быть обновлен, и мой сигнал тревоги не выдается из-за спящего устройства, будет ли он обновлен НЕМЕДЛЕННО, когда он проснется ???
Спасибо за вашу помощь !!
PS: Мне действительно интересно, почему определение xml провайдера виджетов не позволяет просто указывать «не будить устройство» с помощью логического переключателя ... это сделало бы жизнь намного проще! Какой виджет нужен, чтобы разбудить устройство в любом случае ??? ; -)
Это то, как далеко я дошел, но это не работает - ничего не происходит:
private void startAlarm(Context pContext) {
Log.d(TAG, "startAlarm");
AlarmManager am = (AlarmManager) pContext.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent("android.appwidget.action.APPWIDGET_UPDATE");
intent.setClass(pContext, getClass());
PendingIntent pi = PendingIntent.getBroadcast(pContext, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
am.set(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + 1000, pi);
}