2011-01-11 6 views
0

vor ein paar Sekunden habe ich mein Widget Debuggen und ich habe festgestellt, dass die onReceive Methode aufgerufen wird, auch wenn mein Widget nicht auf dem Startbildschirm (es hört WIFI_STATE_CHANGED_ACTION). Auch wenn der Prozess meines Widgets nicht läuft, wird es gestartet und die Methode aufgerufen. Der Code in dem manifest ist folgend:onReceive genannt, wenn es nicht sollte

<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> 

Verfahren onReceive rufen einfach eine andere Methode toggleState (den WiFi Zustand zu ändern), und aktualisiert dann das Widget-Bild (von AUS auf dem Bild oder und umgekehrt).

Offensichtlich ist der Aufruf der beiden Methoden toggleState und updateWidget (und so die komplette OnReceive) sind nutzlos, wenn das Widget nicht tatsächlich aktiv auf dem Home-Bildschirm ist ..

Also, ich möchte meine onReceive nur aufgerufen, wenn Mein Widget ist effektiv auf dem Home-Bildschirm platziert..Es gibt einen Weg, dies zu tun? :)

Vielen Dank im Voraus für die Antworten

+0

Können Sie Ihre Frage etwas genauer bearbeiten, wie Sie diesen 'BroadcastReceiver' einrichten? – CommonsWare

+0

Sie haben Recht, tut mir leid :) .. Code hinzugefügt. – Salv0

Antwort

2

Warum würden Sie Ihre Rundfunkempfänger nicht genannt werden? Das ist der Punkt, an dem ein Broadcast-Empfänger angerufen werden soll, wenn Ihr Prozess/Ihre Aktivität nicht läuft.

Wenn Sie es nur zu bestimmten Zeiten aufrufen möchten, müssen Sie es in Ihrem Widget in Code registrieren und die Registrierung aufheben, wenn Sie keine Broadcasts empfangen möchten.

+0

Der Punkt ist, wenn das Widget nicht auf dem Startbildschirm platziert ist, warum das System den onReceive aufrufen muss? :) Es ist nutzlos – Salv0

+0

Wie soll das System das wissen? Alles, was es weiß, ist, dass es einen Broadcast-Empfänger gibt, der für den Empfang von Broadcasts auf WIFI_STATE_CHANGED registriert ist. So liefert es es. – Falmarri

+0

Deshalb frage ich nach einer Methode (falls vorhanden), um das System wissen zu lassen, dass mein Widget nicht auf dem Startbildschirm ist und der Aufruf von onReceive sinnlos ist: P – Salv0

Verwandte Themen