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

Posted

技术标签:

【中文标题】一些第 3 方小部件在应用程序升级后停止更新【英文标题】:Some 3rd party widgets stop updating after application upgrade 【发布时间】:2015-07-29 21:45:01 【问题描述】:

我的应用程序托管用户安装的小部件,与启动器应用程序相同。

绑定小部件后,一切正常。小部件是自动创建和更新的,我可以单击以导航内部视图。

一切正常,直到我从 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),但它不会在我的应用程序更新时被调用。

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

不胜感激!

【问题讨论】:

什么:您测试的设备?操作系统版本?启动器(即三星触摸向导等)? 很多设备...我的应用程序已发布...许多用户报告了此问题,我设法在 3 种不同的设备(android 4.1 及更高版本)上重现它。 @downvoter 请评论原因,以便我改进我的问题。 【参考方案1】:

已解决。

我最不想做的事,可能是我应该尝试的第一件事。 我继续重新创建小部件,我发现我不必完全重新创建它们,只需使用我已有的相同小部件 ID 重新调用 bindAppWidgetIdIfAllowed()

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

【讨论】:

【参考方案2】:

    如果小部件安装在 SD 卡上,某些 Android 功能将中断。尝试将其移至设备存储并重新测试。

    确保在 putExtra(MyWidgetProvider.WIDGET_ID_KEY, ids); 中使用唯一键;

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

【讨论】:

谢谢,但这不是问题。它主要发生在系统小部件上,例如 Google Play 音乐小部件。 2-3 仅在您有 AppWidgetProvider 并且覆盖其 onReceive()/onUpdate() 方法时才相关,我没有该方法,因为我没有自己的小部件。我只是托管小部件。我也应该创建自己的 AppWidgetProvider 吗? 谢谢,但我很熟悉这个,以及这个很好的答案***.com/questions/8304387/…,但两者都与您的应用程序拥有自己的小部件的情况有关,而不是当您托管其他应用程序的小部件时。如果我在这里遗漏了什么,如果你能指出,我将不胜感激。

以上是关于一些第 3 方小部件在应用程序升级后停止更新的主要内容,如果未能解决你的问题,请参考以下文章

PyQt5 语法高亮编辑器

棉花糖升级后,appwidget listview 行未更新或加载

以编程方式停止 iOS 中的应用升级

应用发布更新后,在公司的FireStore数据的路径

C# 为啥定时器会自动停止

警报管理器意外停止