onUpdate 的 appWidgetIds[] 中有哪些 id?

Tob*_*ias 4 android background identifier android-appwidget

执行方法的数组appWidgetIds中的 ids

公共无效onUpdate(上下文上下文,AppWidgetManager appWidgetManager,int [] appWidgetIds){

都属于我的应用程序吗?

如果是这样,那么我的 Android 的必杀技中会有一些应用程序小部件,因为如果我删除所有应用程序小部件,数组中仍然保留一些 id,这些 id 不会显示在我的主屏幕上。:-(

有没有办法删除所有小部件?

Izk*_*ata 5

Weeelp,8 年后我又回到了 Android 开发(很惊讶地发现我已经对这个问题发表了评论),现在我有了一个真正的答案。这个问题似乎在这个问题最初发布几年后才变得更加出名,但基本上是:Android 中有一个错误几乎永远没有修复。

所有这些幻像 ID 都是您在某个时刻开始创建的小部件的 appWidgetIds,但在小部件配置活动中被错误地取消了

在开发人员文档中,它包含以下代码示例,用于确认小部件的创建:

Intent resultValue = new Intent();
resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
setResult(RESULT_OK, resultValue);
finish();
Run Code Online (Sandbox Code Playgroud)

仔细阅读下面的提示:

提示:当您的配置活动首次打开时,将活动结果设置为 RESULT_CANCELED 以及 EXTRA_APPWIDGET_ID,如上面的步骤 5 所示。这样,如果用户在到达结束之前退出 Activity,App Widget 主机会收到配置已取消的通知,并且不会添加 App Widget。

虽然 Android 接受setResult(RESULT_CANCEL);(并且很多教程都使用它,我相信甚至官方文档也曾经有过这样的示例代码),但这是错误的。在不传递新 ID 的情况下,它会作为那些神秘的虚拟 ID 之一保留在系统中。

取消创建小部件的正确方法是setResult(RESULT_CANCEL, resultValue);