6

Mi sono registrato a ConnectivityManager.CONNECTIVITY_ACTION BroadcastReceiver, per ricevere eventi di stato della rete, ma la mia funzione onReceive non viene chiamata quando accendo o spengo la connessione wifi.Non è possibile ricevere eventi relativi alla rete

Come accennato nei documenti, si tratta di un ricevitore di broadcasting appiccicoso che viene attivato quando ci si registra per esso.

Ma non ricevo alcun evento nella mia funzione onReceive quando mi registro per questo ricevitore, quale potrebbe essere la causa?

Nel file Manifest, dispongo di tutte le autorizzazioni per accedere alle connessioni Internet/rete/Wifi e ai relativi stati.

sto registrando con questo intento utilizzando seguente codice:

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

Nel mio Logcat, vengo seguente errore registro Messaggio per questo ricevitore 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.

+0

Si vede lo stesso problema se si registra il ricevitore tramite il manifest? La tua connessione wifi è utilizzabile per la trasmissione dei dati? È possibile pubblicare il codice che si sta utilizzando in 'onReceive()' per 'mNetworkStateReceiver'? –

+0

Non ho mai provato a registrarlo tramite file manifest, lo proverò prima! – User7723337

+0

puoi prendere in considerazione la ricompensa. Altrimenti andrà invano – Sameer

risposta

4

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 dimenticate la registrazione tutti i permessi di rete.

+0

È sufficiente ' ' giusto! o dobbiamo aggiungere qualche altra autorizzazione? – Shravan

+0

Puoi dare un'occhiata a questo http://stackoverflow.com/q/30062487/3742271? – Shravan

3

provare utilizzando il file manifesto

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

classe MyNetworkStateReceiver dovrebbe estendersi BroadcastReceiver

+0

Lo sto facendo attraverso il codice JAVA, non c'è bisogno di aggiungerlo nel file manifest. – User7723337

0

Sembra una questione di livello inferiore - Googling l'errore rivela più forum rom hacking e le loro disfunzioni wifi. Su cosa stai provando? Prova a provare su un altro dispositivo o un emulatore. (Presumo che avete provato a ripartire la vostra :))

Inoltre, assicurarsi di annullare la registrazione del ricevitore quando l'attività/servizio viene distrutto (forse questo ha qualcosa a che fare con l'errore di connessione)

PS io ti conosco hai detto, ma controlla ancora di avere

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

nel file manifest.

0

Si può anche provare a ottenere le autorizzazioni per Internet, WIFI e blocco multicast, provare ad aggiungerle 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 questi autorizzazione accordata a un nell'applicazione casa ho costruito che utilizza non solo la connessione Wi-Fi per l'invio e la ricezione di dati di rete, ma qualsiasi tipo di scheda di rete (LAN, radio) che posso filtrata tramite l'SDK in C (il dispositivo deve essere rootato). Ma usando queste autorizzazioni non ho problemi.