Domanda

Mi sono registrato ConnectivityManager.CONNECTIVITY_ACTION Broadcastreceiver, per aver ricevuto eventi statali di rete, ma il mio onReceive La funzione non viene chiamata quando accendo o spento la mia connessione wifi.

Come menzionato nei documenti, questo è un ricevitore di trasmissione appiccicoso che viene licenziato quando ci registramo.

Ma non sto ricevendo eventi nel mio onReceive Funzione Quando mi registro per questo ricevitore, quale potrebbe essere la causa?

Nel mio file manifest, ho tutte le autorizzazioni per accedere alle connessioni Internet/rete/WiFi e i loro stati.

Mi sto registrando con questo intento usando il seguente codice:

registerReceiver(mNetworkStateReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));

Nel mio logcat, ricevo il seguente registro dei messaggi di errore per questo ricevitore di trasmissione:

01-01 00:05:29.804: ERROR/WifiHW(1305): Unable to open connection to supplicant on "/data/system/wpa_supplicant/wlan0": Connection refused

Quale potrebbe essere la causa? C'è un modo per scoprire se Broadcastreceiver è registrato correttamente o no?

Grazie.

È stato utile?

Soluzione

Questo funziona per me:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<receiver android:name=".receiver.ConnectivityReceiver">
   <intent-filter>
      <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
   </intent-filter>
</receiver>

Codice:

public class ConnectivityReceiver extends BroadcastReceiver {

  @Override
  public void onReceive(Context context, Intent intent) {
      Log.d(ConnectivityReceiver.class.getSimpleName(), "action: "
              + intent.getAction());
  }
}

E non dimenticare di registrare tutta l'autorizzazione di rete.

Altri suggerimenti

provalo usando il file manifest

<receiver android:name=".MyNetworkStateReceiver" >
    <intent-filter >
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    </intent-filter>
</receiver>

la classe MyNetworkStateReceiver dovrebbe estendersi BroadcastReceiver

Sembra un problema di livello inferiore: su Google l'errore rivela più forum di hacking ROM e i loro malfunzionamenti WiFi. Cosa stai testando? Prova a test su un altro dispositivo o un emulatore. (Suppongo che tu abbia provato a riavviare il tuo :))

Inoltre, assicurati di cancellare il ricevitore quando la tua attività/servizio viene distrutta (forse questo ha qualcosa a che fare con l'errore di connessione)

PS So che hai detto che lo fai, ma controlla ancora il doppio

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

nel tuo manifest.

Puoi anche provare a ottenere autorizzazioni per Internet, WiFi e blocco multicast, provare ad aggiungerli alle autorizzazioni.

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/>

Sono tenuto a utilizzare queste autorizzazioni per un'applicazione in casa che ho creato che utilizza non solo il WiFi per l'invio e la ricezione di dati di rete, ma qualsiasi tipo di adattatore di rete (LAN, radio) che posso filtrare tramite SDK in C (dispositivo deve essere radicato). Ma usando queste autorizzazioni non ho problemi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top