我想创建一个具有两个小部件大小(4x2和4x4)的应用 为此,我创建了两个接收器:
<receiver android:name=".widgets.CloudWidgetProviderLarge" android:label="@string/app_name">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/widget_large" />
</receiver>
<receiver android:name=".widgets.CloudWidgetProviderMedium" android:label="@string/app_name">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/widget_medium" />
</receiver>
一个配置活动:
<activity android:name=".widgets.WidgetConfigurationActivity">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/>
</intent-filter>
</activity>
两个widgetProviders继承自我的抽象WidgetBaseProvider,只实现不同的部分。
我的问题如下:
具体WidgetProvider类的onUpdate方法在配置活动启动时调用,但在配置完成时不调用。因此,在完成配置时不会更新小部件。
到目前为止我在WidgetConfigurationActivity中尝试过的内容:
这不会导致更新。不知道它有什么问题:
val appWidgetManager = AppWidgetManager.getInstance(this)
val views = RemoteViews(this.packageName, R.layout.widget_newscloud)
appWidgetManager.updateAppWidget(widgetData.widgetId, views)
val result = Intent().putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetData.widgetId)
setResult(Activity.RESULT_OK, result)
finish()
这很有效但很明显只适用于一种小部件类型:
val providerLarge = CloudWidgetProviderLarge()
providerLarge.onUpdate(this, appWidgetManager, intArrayOf(widgetId))
答案 0 :(得分:0)
遇到这个问题后,我不得不做一些研究。
我首先观察到config活动完成后未调用onUpdate。 然后我找到了答案。 https://stackoverflow.com/a/12236443/2052088 但是我发现这并不能100%地解决它,然后我发现这个答案https://stackoverflow.com/a/44516844/2052088完成了解决方案。
两者结合:
Intent intent = new Intent(this, YourWidgetProvider.class);
intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
int[] ids = AppWidgetManager.getInstance(this)
.getAppWidgetIds(new ComponentName(this, YourWidgetProvider.class));
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids);
intent.setFlags(Intent.FLAG_RECEIVER_FOREGROUND);
sendBroadcast(intent);
我知道已经过去两年了,但是希望它能对某人有所帮助。