主页小部件未在使用 JobIntentService 在奥利奥上刷新



我的应用程序包含使用IntentService定期更新的主页小部件。

现在,当针对 API 级别 26 时,由于对 Oreo 的限制,我不得不稍微改变一下。您可以在此处找到更多信息。

我找到了这篇文章,其中描述了如何使IntentService在Oreo上工作。

我按照描述做了所有事情:

  • 已将我的IntentService转换为JobIntentService
  • 将所有逻辑从onHandleIntent()移至onHandleWork()
  • 在安卓清单文件中向服务添加了android:permission="android.permission.BIND_JOB_SERVICE"
  • 此外,<uses-permission android:name=”android.permission.WAKE_LOCK” />已经在该项目中使用
  • 我走得更远,开始使用以下逻辑来启动服务:enqueueWork(context, LocationForecastService.class, JOB_ID, work);

它仍然无法正确刷新或初始化小部件。服务实际启动,下载数据,但问题可能出在通过广播发送数据的地方。当 API 级别设置为 24 时,它有效。

小部件在 AndroidManifest 文件中注册为 BroadcastReceiver,如下所示:

<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>

有人遇到过类似的问题吗?

为了完成这项工作,我必须按照上面问题中提供的 URL 中所述实现所有内容。

在制作发送广播的意图时要小心非常重要。

而不是

Intent intent = new Intent(action);

应使用以下代码:

Intent intent = new Intent(context, clazz);
intent.setAction(action);

其中clazz是小部件提供程序类。

最新更新