Non in grado di ricevere eventi relativi alla rete
-
28-10-2019 - |
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.
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.