gpt4 book ai didi

android - 配置后未调用小部件 onUpdate

转载 作者:太空狗 更新时间:2023-10-29 14:42:23 24 4
gpt4 key购买 nike

我想创建一个具有两种小部件尺寸(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 :

<activity android:name=".widgets.WidgetConfigurationActivity">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/>
</intent-filter>
</activity>

这两个 widgetProvider 继承 self 的抽象 WidgetBaseProvider,只实现了不同的部分。

我的问题如下:
具体 WidgetProvider 类的 onUpdate 方法在配置 Activity 启动时调用,但在配置完成时不调用。因此在完成配置后不会更新小部件。

到目前为止,我在 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))

最佳答案

在我自己遇到这个问题之后,我不得不做一些研究。

我首先观察到在配置 Activity 完成后没有调用 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);

我知道已经两年多了,但希望它对某人有所帮助。

关于android - 配置后未调用小部件 onUpdate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45844883/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com