2011-01-11 8 views
0

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

<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 называется только если мой виджет эффективно размещен на главном экране. Есть ли способ сделать это? :)

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

+0

Можете ли вы изменить свой вопрос, чтобы быть более конкретным о том, как вы настраиваете этот «BroadcastReceiver»? – CommonsWare

+0

Вы правы, извините :) .. Код добавлен. – Salv0

ответ

2

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

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

+0

Дело в том, что если мой виджет не размещен на главном экране, почему система должна вызывать onReceive? :) Это бесполезно – Salv0

+0

Как система должна это знать? Все, что он знает, это радиовещательный приемник, зарегистрированный для приема трансляций по WIFI_STATE_CHANGED. Так оно и доставляет. – Falmarri

+0

Вот почему я прошу метод (если существует), чтобы система узнала, что мой виджет не находится на главном экране, и вызов onReceive бесполезен: P – Salv0

Смежные вопросы