Домашний виджет не обновляется в Oreo с помощью JobIntentService
Мое приложение содержит домашние виджеты, которые периодически обновляются с помощью IntentService
,
Теперь при настройке API уровня 26 мне пришлось немного изменить это из-за ограничений на Oreo. Вы можете найти больше информации здесь.
Я нашел эту статью, в которой описано, как заставить IntentService работать на Oreo.
Я сделал все, как описано:
- Переоборудовал мой
IntentService
вJobIntentService
- переместил всю логику из
onHandleIntent()
вonHandleWork()
- добавленной
android:permission="android.permission.BIND_JOB_SERVICE"
на сервис в файле AndroidManifest - также,
<uses-permission android:name=”android.permission.WAKE_LOCK” />
уже используется в этом проекте - Я пошел дальше и начал использовать следующую логику для запуска Сервиса:
enqueueWork(context, LocationForecastService.class, JOB_ID, work);
Это все еще не обновляет или инициализирует виджет должным образом. Сервис на самом деле запускается, загружает данные, но может быть проблема с отправкой данных через широковещательную рассылку. Работает, когда уровень API установлен на 24.
Виджеты регистрируются как BroadcastReceivers в файле AndroidManifest следующим образом:
<receiver
android:name=".widgets.provider.WeekWidgetProvider"
android:label="@string/Widget_WeekForecast_Title">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<action android:name="action_widget_data_change_event" />
<action android:name="action_week_widget_data_change_event" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/appwidget_week_provider_layout" />
</receiver>
Кто-нибудь попал в подобную проблему?
1 ответ
Чтобы это работало, мне нужно было реализовать все, как описано в URL, указанных в моем вопросе выше.
Очень важно соблюдать осторожность при создании намерения для отправки трансляции.
Вместо
Intent intent = new Intent(action);
Следующий код должен быть использован:
Intent intent = new Intent(context, clazz);
intent.setAction(action);
куда clazz
класс провайдера виджетов