Мое приложение, кроме своей деятельности, имеет сервис и виджет приложения.
Я хотел, чтобы при щелчке виджетов выполнялся фрагмент кода, который включал / отключал службу приложения.
Итак, нажатие на виджет приложения запускает отложенное намерение, построенное следующим образом:
Intent intent = new Intent(ACTION_ENABLE_DISABLE);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
(ACTION_ENABLE_DISABLE определен мной, конечно.)
И в манифесте я указываю это действие в фильтре намерений.
Затем я переопределил метод onReceive, и если действие намерения - ACTION_ENABLE_DISABLE, я выполняю тот фрагмент кода, который включает / отключает службу.
Если это не так, я вызываю super.onReceive, так что обычные трансляции виджетов приложения будут выполнены.
Пока все хорошо! виджет работает нормально.
Но, допустим, я создал его, когда PID моего приложения был X.
Затем пользователь оставил мои действия, и они были уничтожены; Так что как сервис - допустим, пользователь закрыл его.
Таким образом, мой процесс не содержит ни действий, ни сервисов - он уничтожается / выходит из диспетчера задач, оба случая актуальны.
В следующий раз, когда он будет создан, у него будет другой PID, и теперь нажатие на виджет приложения НИЧЕГО НЕ ДЕЛАЕТ.
Виджет приложения все еще можно обновить вручную, например, из действия. Но нажатие на него не приводит к:
- Передается трансляция ACTION_ENABLE_DISABLE.
OR
- Виджет моего приложения, получающий эту трансляцию.
Происходит одно из следующих действий - например, когда я смотрю в logcat, и сообщения, которые я регистрирую с помощью Log.d в методах onReceive виджета, НЕ отображаются.
Почему это? Нужно ли указывать что-то особенное при отправке трансляции или что-либо в декларации получателя в манифесте?
И, говоря о том, есть ли что-нибудь лучшее, что можно использовать для выполнения собственного кода, когда щелкает представление в виджете приложения (а не мой метод).
Большое спасибо!