Я внедряю виджет и столкнулся со следующими проблемами:
1)onUpdate
вызывается, когда я добавляю виджет на главный экран, даже если я указал действие конфигурации. Как только я добавляю его на главный экран, отправляется широковещательная рассылка APPWIDGET_ENABLED
, за которой следует APPWIDGET_UPDATE
, а затем запускается действие по настройке. Это ошибка? Как я должен понимать в методе onUpdate
, который вызывается до возврата активности конфигурации? Я могу сделать это через общее значение предпочтения, но я бы хотел, чтобы он вел себя так, как написано в руководстве разработчика, т.е. метод onUpdate
не должен вызываться.
2)onUpdate
не вызывается каждые updatePeriodMillis
секунд, которые были установлены на 10000
, т.е. 10
секунд в целях тестирования. Я что-то пропустил в объявлении receiver
в файле манифеста? Я продолжаю получать предупреждение Lint Экспортированный приемник не требует разрешения , но я думаю, что это проблема Lint, а не моя вина. РЕДАКТИРОВАТЬ:Я только что нашел это в справочных документах:Примечание. :Обновления, запрошенные с помощью updatePeriodMillis, не будут доставляться чаще, чем раз в 30 минут. Итак, правильно, что виджет не обновляется так часто, как я указал, и я изменил время на 1800000
миллисекунд.
3)Я хочу доставить свое собственное широковещательное действие поставщику виджетов, правильно ли добавить еще один блок receiver
в манифесте, нацеленный на тот же класс поставщика, или мне следует добавить только другое действие намерения в intent-filter
, содержащее APPWIDGET_UPDATE
действие? Кстати, я прокомментировал свой второй блок receiver
, и это не является причиной вышеуказанных проблем. Я создал еще один блок receiver
, потому что хотел объявить его неэкспортируемым,чтобы действие intent-filter
запускалось только моим кодом приложения, а не кем-либо еще.
AndroidManifest.xml
<receiver android:name="MyWidgetProvider"
android:exported="true">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/my_widget_info" />
</receiver>
<receiver android:name="MyWidgetProvider"
android:exported="false">
<intent-filter>
<action android:name="org.test.mywidget.FORCE_SMALL_WIDGET_UPDATE" />
</intent-filter>
</receiver>
мой виджет __info.xml
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="294dp"
android:minHeight="110dp"
android:updatePeriodMillis="1800000"
android:initialLayout="@layout/my_widget_layout"
android:configure="org.test.mywidget.MyWidgetConfiguration"
android:resizeMode="none">
</appwidget-provider>