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

时间:2015-05-18 11:44:09

标签: android android-widget android-appwidget

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

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

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

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

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:5)

<强>解决。

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

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

答案 1 :(得分:3)

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

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

  3. 请勿使用putExtra(AppWidgetManager.EXTRA_WIDGET_IDS,ids);