Una volta che ho avuto un problema, voi ragazzi siete stati davvero d'aiuto. Quindi eccomi di nuovo con un altro problema su cui sono caduto ...:/getBoolean (EXTRA_NO_CONNECTIVITY) restituisce sempre false
Sto eseguendo un NetworkReceiver personalizzato che estende BroadcastReceiver. Voglio rilevare quando il telefono ha una connessione Internet in modo da poter avviare un servizio ogni volta che lo fa. Ho letto un sacco di argomenti e di tutti gli argomenti più o meno pronta al seguente codice che non funziona per me:
public class NetworkReceiver extends BroadcastReceiver {
private static final String tag = NetworkReceiver.class.getSimpleName();
@Override
public void onReceive(Context context, Intent intent) {
Log.i(tag,"****** NetworkReceiver // onReceive()");
boolean noConnection = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
Log.i(tag,"****** NetworkReceiver // Network Down?: " + intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false));
}
// TODO Bug: Never stops the service. Stays always connected!
if(noConnection) {
Log.i(tag,"****** NetworkReceiver // Stopping Service...");
context.stopService(new Intent(context, FetchService.class));
} else {
Log.i(tag,"****** NetworkReceiver // Starting Service!");
context.startService(new Intent(context, FetchService.class));
}
}
Il problema che ho è che il logcat ritorna sempre NetworkDown?: false
e il servizio non si ferma mai (è riavvia tutto il tempo). L'ho provato sull'emulatore premendo F8 e l'ho provato anche sul mio dev-phone (non ha SIM, l'accesso internet è dal mio router wifi) spegnendo il router -> nessun accesso internet garantito!
mio manifesto include le seguenti righe:
...
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<receiver android:name=".NetworkReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
...
Vorrei anche notare che ho anche provato <action android:name="android.net.ConnectivityManager.CONNECTIVITY_ACTION" />
nel mio file manifesto senza alcun cambiamento e che quando ho modificato la linea: intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false)
a intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, true)
il risultato era sempre vero, e quindi ha sempre cercato di fermare il mio servizio e non avviarlo mai.
Sospetto che gli Extra dall'Intento non vengano letti affatto ed è per questo che il valore predefinito di getBooleanExtra()
restituisce sempre.
PS. Sono su Android 2.1
Grazie!
Sono a conoscenza del metodo che hai usato. Tuttavia sono rimasto un po 'sorpreso dal fatto che molte persone abbiano consigliato il codice che ho usato (lo leggo anche su un libro O'reilly che ho acquistato di recente su Android!) Se non riesco a trovare una soluzione con la trasmissione CONNECTIVITY_ACTION penso che seguirò il tuo esempio e fare un controllo nel mio servizio con i metodi di ConnectivityManager. Grazie per la risposta :) – snoopaki
Siete i benvenuti @snoopaki - in realtà avrei preferito venire con una soluzione usando il vostro metodo, ma semplicemente non vedo cosa sta succedendo e perché. – Shlublu
In realtà ho cambiato il mio servizio in IntentService e la gestione in-service della modifica della connettività ha avuto più senso. Quindi dovrei scegliere la tua risposta come quella giusta !! grazie :) – snoopaki