Виджет onUpdate вызывается при запуске действия конфигурации

Я внедряю виджет и столкнулся со следующими проблемами:

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>
25
задан Gianni Costanzi 31 July 2012 в 11:47
поделиться