Некоторые сторонние виджеты перестают обновляться после обновления приложения
мое приложение размещает установленные пользователем виджеты, такие же, как приложение запуска.
как только я привязываю виджет, все работает нормально. Виджеты создаются, обновляются автоматически, я могу щелкнуть для навигации по внутренним видам.
все работает нормально, пока я не обновлю свое приложение из 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
если все еще в порядке, а если нет, виджет может быть больше не установлен или вам нужно запустить его экран конфигурации.
некоторые функции Android сломается, если виджет установлен на SD-карте. Попробуйте переместить его в хранилище устройства и повторно протестировать.
убедитесь, что вы используете уникальные ключи с putExtra(MyWidgetProvider.WIDGET_ID_KEY, ids);
не используйте putExtra (AppWidgetManager.EXTRA_WIDGET_IDS, ids);