onReceive вызывается, когда это не должно - PullRequest
0 голосов
/ 11 января 2011

несколько секунд назад я отлаживал свой виджет и обнаружил, что метод onReceive вызывается, даже если мой виджет не на домашнем экране (он прослушивает WIFI_STATE_CHANGED_ACTION). Даже если процесс моего виджета не запущен, он запустится и будет вызван метод. Код в манифесте следующий:

<application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true">

    <receiver android:name="WiFiWidget">
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
        </intent-filter>

        <meta-data android:name="android.appwidget.provider" 
                   android:resource="@xml/widget_info" />
    </receiver>

</application>

Метод onReceive просто вызывает другой метод toggleState (для изменения состояния Wi-Fi), а затем обновляет изображение виджета (с выключенного на включенное изображение или наоборот).

Очевидно, что вызов двух методов toggleState и updateWidget (и, следовательно, полного onReceive) бесполезен, если виджет фактически не активен на домашнем экране.

Итак, я хочу, чтобы мой onReceive вызывался только в том случае, если мой виджет эффективно размещен на домашнем экране. Есть ли способ сделать это? :)

Заранее спасибо за ответы

1 Ответ

2 голосов
/ 13 января 2011

Почему не будет вызван ваш вещательный приемник? Вот в чем смысл широковещательного приемника - вызывать его, когда ваш процесс / деятельность не запущены.

Если вы хотите, чтобы он вызывался только в определенное время, вам нужно зарегистрировать его в коде в вашем виджете и отменить его регистрацию, когда вы не хотите получать трансляции.

...