У меня есть виджет, который должен прослушивать событие BATTERY_CHANGED, однако, поскольку это событие защищено и не может быть объявлено из манифеста, я создаю новый BroadcastReceiver из конструктора приложения:
public void onCreate() {
super.onCreate();
if (DEBUG) Log.d(TAG, "onCreate()");
// Register receivers
if (receiver == null) {
receiver = new MYReceiver(this);
}
// Create new intentfilter
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_BATTERY_CHANGED);
registerReceiver(receiver, intentFilter);
}
Затем из Receiver я вызываю статический метод AppWidgetProvider, который фактически обновляет виджет с помощью RemoteViews. Все работает безупречно до 1 часа, как прошло, после этого мой приемник исчезает и виджет больше не обновляется. Я тестирую это на Droid с прошивкой 2.2.1 -
Что я делаю не так? Это правильный способ обновления виджета (мне просто нужно это событие, поэтому я не хочу иметь сервис, если он не нужен). Должен ли я использовать AlarmManager, чтобы время от времени быть уверенным, что мой приемник все еще там? Я могу это сделать?
Спасибо.