Я реализую виджет, и я сталкиваюсь со следующими проблемами:
1) onUpdate
вызывается при добавлении виджета на главный экран, даже если я задал конфигурационную активность. Как только я добавлю его на главный экран, рассылка APPWIDGET_ENABLED
отправляется, а затем APPWIDGET_UPDATE
, а затем запускается активность конфигурации.. Является ли это ошибкой? Как я должен понимать метод onUpdate
, который вызывается до того, как возвращается активность конфигурации? Я могу сделать это с помощью общего значения предпочтений, но я бы хотел, чтобы он вел себя так, как написано в руководстве разработчика, т.е. Метод onUpdate
не должен вызываться.
2) onUpdate
не вызывается каждые updatePeriodMillis
секунды, которые были установлены на 10000
, т.е. 10
секунды для целей тестирования.. Я пропустил что-то в receiver
в файле манифеста? Я продолжаю получать предупреждение Lint. Экспортированный приемник не требует разрешения, но я думаю, что это проблема Lint, а не моя ошибка.
EDIT. Я только что нашел это в справочных документах. Примечание. Обновления, запрашиваемые с помощью 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>
my_widget_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>