Некоторые сторонние виджеты перестают обновляться после обновления приложения

мое приложение размещает установленные пользователем виджеты, такие же, как приложение запуска.

как только я привязываю виджет, все работает нормально. Виджеты создаются, обновляются автоматически, я могу щелкнуть для навигации по внутренним видам.

все работает нормально, пока я не обновлю свое приложение из Play store (или вручную с подписанным APK).

после обновления виджеты по-прежнему отображаются, но они больше не будут обновляться. Некоторые виджеты функционируют, когда я нажимаю на них, но представление застряло и никогда не обновляется, пока я не воссоздам виджет (получите новый идентификатор и свяжите его).

Я попытался заставить обновление с помощью

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 ответов


решена.

последнее, что я хотел сделать, это, вероятно, первое, что я должен был попробовать. Я перешел к воссозданию виджетов, и я обнаружил, что мне не нужно полностью их воссоздавать, просто перезвоните bindAppWidgetIdIfAllowed() с тем же идентификатором виджета, который у меня уже есть.

метод return true если все еще в порядке, а если нет, виджет может быть больше не установлен или вам нужно запустить его экран конфигурации.


  1. некоторые функции Android сломается, если виджет установлен на SD-карте. Попробуйте переместить его в хранилище устройства и повторно протестировать.

  2. убедитесь, что вы используете уникальные ключи с putExtra(MyWidgetProvider.WIDGET_ID_KEY, ids);

  3. не используйте putExtra (AppWidgetManager.EXTRA_WIDGET_IDS, ids);