Я столкнулся с более странным поведением на некоторых устройствах при добавлении нового экземпляра appwidget на главный экран.
У меня есть приложение AppWidget с активностью настройки. Как сказано в учебном обновлении appwidget, я должен сделать сам.
public static void updateWidgetAndSendIntent (Activity activity, int mAppWidgetId, boolean isUpdate) { updateWidgets(activity); if (!isUpdate) { Intent resultIntent = new Intent(); resultIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId); activity.setResult(Activity.RESULT_OK, resultIntent); activity.finish(); } } public static void updateWidgets(Context context) { new ManagerUpdateWidget(context).updateAllWidgetInstances(); }
ManagerUpdateWidget.java
public void updateAllWidgetInstances() { Bitmap widget = getCustomView(context); for (int widgetId : appWidgetIds) { updateCurrentInstance(widgetId, widget); } }
Дело в том, что на Samsung Galaxy Note 2 (GT-N7100) с Android 4.4.2 все в порядке, но на Samsung Galaxy Note 3 (SM-N900) с Android 5.0 у меня есть «фантомный» appwidget, а не настоящий appareidget на Главный экран, но «фантомные», когда вы не видите appwidget на экране, но внутри вашего приложения Appwidget существует с идентификатором и регулярными обновлениями. Я тестировал свое приложение на эмуляторах genymotion (Android 4.3 и 5.0), но все было хорошо.
Пожалуйста, предложите мне исправить эту странную ошибку.
Работа с «фантомными» виджетами – это кошмар. Можете ли вы обновить все экземпляры, используя updateAppWidget (ComponentName provider, RemoteViews views)
?
Согласно документации, этот метод будет устанавливать RemoteViews для использования для всех экземпляров AppWidget для поставляемого поставщика AppWidget.
AppWidgetManager manager = AppWidgetManager.getInstance(context); ComponentName component = new ComponentName(context, MyAppWidgetProvider.class); manager.updateAppWidget(component, remoteViews);