【问题标题】:What ids are in onUpdate's appWidgetIds[]?onUpdate 的 appWidgetIds[] 中有哪些 id?
【发布时间】:2011-11-16 15:11:54
【问题描述】:

在方法的数组appWidgetIds中做ids

public void onUpdate(上下文上下文,AppWidgetManager appWidgetManager, int[] appWidgetIds) {

都属于我的应用程序?

如果是这样,那么在我的 android 的必杀技中某处有一些 appwidgets,因为如果我删除所有 appwidgets,数组中仍然有一些 ids 没有显示在我的主屏幕上。 :-(

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

【问题讨论】:

  • 我记得看到过类似的东西...... IIRC,如果 appWidgetId 无效,我只是将它包装在 try/catch 或其他东西中。有人有真正的解决方案吗?
  • 获得一个“有效”的 appwidgetid 不是我的担心。我还担心我是否创建了任何不可见的小部件。因为如果我现在创建一个新的小工具,它的 id 就会出现,如果我删除它,它的 id 就会消失。但是这些没有(可见)小部件的其他 id 是什么?
  • 啊,也许我看到了一些不同的东西。我的有时(但并非总是)在被移除后会留下来。

标签: android background android-appwidget identifier


【解决方案1】:

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

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

developer documentation 上,它包含此代码示例,用于确认小部件的创建:

Intent resultValue = new Intent();
resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
setResult(RESULT_OK, resultValue);
finish();

仔细阅读下面的提示:

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

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

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

【讨论】:

    【解决方案2】:

    你的应用小部件可以有多个小部件用于同一个应用,比如一个显示位置的小部件,一个显示股票的小部件,一个显示等等等等的小部件, 在这种情况下,可以为每个小部件分配一个名为 appWidgetID 的 ID

    【讨论】:

    • 这并不是我问题的真正答案。我知道我可以使用多个小部件。但无论如何我都解决了:我卸载然后重新安装了我的应用程序,之后所有的幽灵小部件都消失了。所以 appWidgetIds 中的所有 id 都是我的 App 的 id。
    • @LordFlash ,您应该将此作为答案发布。我遇到了同样的问题,你的提议就是解决方案。
    【解决方案3】:

    我解决了:我卸载了,然后重新安装了我的应用程序,然后所有 ghost 小部件 都消失了。

    总结:appWidgetIds 中的所有 id 都是我的应用的 id

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多