第三方小部件在应用程序升级后停止更新

9

我的应用程序托管用户安装的小部件,就像启动器应用程序一样。

一旦绑定小部件,一切都正常运作。小部件会自动创建和更新,我可以单击以导航内部视图。

一切都保持正常工作,直到我从Play商店更新我的应用程序(或手动使用签名的APK进行更新)。

更新后,小部件仍然显示,但它们不再更新。当我点击其中某些小部件时,有些小部件会发挥功能,但视图会被卡住,永远不会得到更新,直到我重新创建小部件(获取新ID并绑定)。

我尝试使用以下命令强制更新:

Intent intent = new Intent();
intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
intent.setComponent(appWidgetInfo.provider);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[]
                {appWidgetId});
context.sendBroadcast(intent);

但这并没有帮助...

我想尝试在点击时进行强制更新,但我找不到任何方法来获取小部件的RemoteViews(因为这不是我的小部件,我只是托管它)。

RemoteViews views = 
      new RemoteViews(context.getPackageName(),R.layout.mywidget_layout);

Intent updateIntent = new Intent();
updateIntent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
updateIntent.putExtra(myWidgetProvider.WIDGET_IDS_KEY, ids);
PendingIntent pendingIntent = PendingIntent.getBroadcast(
      context, 0, updateIntent, PendingIntent.FLAG_UPDATE_CURRENT);

views.setOnClickPendingIntent(R.id.view_container, pendingIntent);

我还实现了一个AppWidgetProvider来监听小部件ID的更改(APPWIDGET_HOST_RESTORED),但它在我的应用程序更新时没有被调用。

我的下一步将是在应用程序更新后重新创建所有小部件,但我真的不想这么做。

非常感谢任何帮助!


什么设备正在测试?操作系统版本?启动器(例如:三星 TouchWiz 等)? - Steven Mark Ford
很多设备...我的应用已发布...许多用户报告了这个问题,我在3个不同的设备上进行了复现,Android版本为4.1及以上。 - Lior Iluz
@downvoter请评论一下,为什么我可以改进我的问题。 - Lior Iluz
2个回答

5

已解决。

我最后要做的事情,可能是我应该首先尝试的事情。 我开始重新创建小部件,发现我不必完全重新创建它们,只需使用相同的小部件ID重新调用bindAppWidgetIdIfAllowed()即可。

如果一切仍然正常,该方法将返回true,否则,小部件可能不再安装或您需要触发其配置屏幕。


3
  1. 如果将小部件安装在SD卡上,某些Android功能将会失效。请尝试将其移动到设备存储器并重新测试。

  2. 确保使用唯一的键来putExtra(MyWidgetProvider.WIDGET_ID_KEY, ids);

  3. 不要使用putExtra(AppWidgetManager.EXTRA_WIDGET_IDS, ids);


谢谢,但那不是问题所在。这通常发生在系统小部件上,比如 Google Play 音乐小部件。 - Lior Iluz
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Lior Iluz
谢谢,但我已经熟悉这个了,还有这个很棒的答案https://dev59.com/T2sy5IYBdhLWcg3w0RM5#8304682,但两者都与您的应用程序具有自己的小部件相关,而不是当您托管其他应用程序的小部件时。如果我在这里漏掉了什么,请指出来,谢谢。 - Lior Iluz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接