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

Вот как я настраиваю виджет APP:

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="240dp" android:minHeight="193dp" android:updatePeriodMillis="86400000" android:initialLayout="@layout/xyz_appwidget" android:configure="com.xyz.activity.Configuration" /> 

Таким образом, система Configuration активность Configuration , как только виджет будет помещен на рабочий экран пользователем. К сожалению, без использования конфигурации этот виджет не следует помещать на экран.

Я добавил некоторые результаты отладки. Это происходит, когда пользователь выбирает виджет для своего рабочего стола. Примечание. Это когда активна настройка, а не виджет.

 I/ActivityManager( 101): Start proc com.xyz for broadcast com.xyz/.widget.xyz.XyzWidgetProvider: pid=14371 uid=10050 gids={3003, 1015} D/XyzWidgetProvider(14371): onReceive: android.appwidget.action.APPWIDGET_ENABLED D/XyzWidgetProvider(14371): onEnabled D/XyzWidgetProvider(14371): onReceive: android.appwidget.action.APPWIDGET_UPDATE 

Таким образом, даже если виджет не настроен, оба события (ENABLED, UPDATE) будут запущены. Enabled имеет смысл для меня, но UPDATE явно нет. Особенно, когда активность Configuration завершена успешно, никакое дополнительное событие UPDATE не отправляется.

Я также прочитал, что, установив результат деятельности Configuration на Activity.RESULT_CANCELED , вы можете отменить процесс настройки. Но поскольку это явно работает асинхронно, я не знаю, как сделать блокировку процесса конфигурации? Кто-нибудь сталкивался с этим раньше?

Мое последнее замечание: я посмотрел в виджетах Android Gallery, который каким-то образом справляется с этим, так что не настроенный виджет галереи не будет добавлен. Но я подозреваю, что у HTC есть магия, так как журналы не очень полезны.

Вот как вы справляетесь с этим: в своей конфигурации вы делаете это в своем onCreate (): setResult (Activity.RESULT_CANCELED);

После завершения настройки конфигурации, например, все параметры установлены, а виджет должен быть показан, выполните setResult (Activity.RESULT_OK);

Таким образом, если пользователь не завершит операцию настройки, ваш виджет будет удален.

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

Еще кое-что. После успешного завершения вам необходимо инициировать обновление виджета из своей конфигурации, потому что система сама по себе не сделает этого.

Так что, похоже, документация Widget api на developer.android.com устарела …

https://groups.google.com/d/topic/android-developers/HfD-ojjsuso/discussion

«Однако в самом коде виджета (onUpdate) вам все равно нужно проверить, завершена ли конфигурация, потому что APPWIDGET_UPDATE обязательно будет вызван до завершения конфигурации».

Это не так, как должно быть. На сайте разработчика Android вы можете прочитать следующее …

«Метод onUpdate () не будет вызываться при создании виджета приложения (система не будет отправлять широковещательную рассылку ACTION_APPWIDGET_UPDATE при запуске операции конфигурации). Задача конфигурации для запроса обновления от AppWidgetManager, когда Виджет приложения впервые создан. Однако onUpdate () будет вызываться для последующих обновлений – он пропускается только в первый раз ».

Intereting Posts
Показать диалоговое окно в разделе «Thread.setDefaultUncaughtExceptionHandler» Социальная аутентификация ASP.NET Web API для Интернета и мобильных устройств Синхронизация с сервером Android Calendar Sync – SYNC_DATA? Как установить идентификатор динамически созданного макета? Есть ли у Glide метод загрузки PNG и SVG? Как использовать это ключевое слово в статическом методе в java? Программно добавлять представления внутри (Linear) Layout (внутри ScrollView) Ошибка «Package R не существует» при создании с помощью Gradle из командной строки Установить фон формы прозрачным в Android Сделать текст плавающим справа в Android Android: путь к папке активов для File ()? Возможно ли увидеть данные приложения из оболочки adb так же, как я вижу, что она монтирует SD-карту? Как отключить «автономный режим» gradle в студии Android? В блоке выбора устройства Android Wear говорится: «offline localhost: 4444 minSdk (API 20)> deviceSdk (API 1)» Лучший способ реализации прокручивающего навигационного ящика