Я реализую виджет, и я сталкиваюсь со следующими проблемами:
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>