Поддерживать живой виджет BroadcastReceiver, даже если он не создан из Manifest - PullRequest
2 голосов
/ 29 ноября 2010

У меня есть виджет, который должен прослушивать событие 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, чтобы время от времени быть уверенным, что мой приемник все еще там? Я могу это сделать?

Спасибо.

1 Ответ

0 голосов
/ 01 декабря 2010

Понятия не имею, почему ваш приемник потерялся через час, но как насчет использования AlarmManager , чтобы периодически проверять, все еще ли он там?Таким образом, вы можете перерегистрировать его, если он потерян.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...