Вот как я настраиваю виджет своего приложения:
<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
, как только виджет был помещен на рабочий стол пользователем. К сожалению, без применения конфигурации этот виджет не должен выводиться на экран.
Я добавил некоторые отладочные данные. Это происходит, когда пользователь выбирает виджет для своего рабочего стола. Примечание: Это когда действие конфигурации находится впереди, а НЕ виджет.
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) будут запущены. Включено для меня имеет смысл, но UPDATE явно нет. Особенно, когда действие Configuration
завершилось успешно, никаких дополнительных событий UPDATE не отправляется.
Я также прочитал это, установив результат действия Configuration
на Activity.RESULT_CANCELED
, можно отменить процесс настройки. Но поскольку это явно работает асинхронно, я не знаю, как сделать процесс настройки блокирующим ? Кто-нибудь сталкивался с этим раньше?
Мое последнее замечание: я взглянул на виджет галереи Android, который каким-то образом управляет этим должным образом, поэтому ненастроенный виджет галереи не будет добавлен. Но я подозреваю, что там есть какая-то магия HTC , поскольку журналы не очень полезны.