Une fois que j'ai eu un problème, vous avez été très utile. Donc là je suis encore avec un autre problème que je suis tombé sur ...:/getBoolean (EXTRA_NO_CONNECTIVITY) renvoie toujours false
Je cours un récepteur réseau personnalisé qui étend BroadcastReceiver. Je veux détecter quand le téléphone a une connexion Internet afin que je puisse démarrer un service quand il le fait. J'ai lu beaucoup de sujets et tous les sujets plus ou moins rapide au code suivant qui ne fonctionne pas pour moi:
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));
}
}
Le problème que j'ai est que le logcat retourne toujours NetworkDown?: false
et le service ne cesse jamais (il redémarre tout le temps). Je l'ai essayé sur l'émulateur en appuyant sur F8 et je l'ai aussi essayé sur mon dev-phone (il n'a pas de carte SIM, l'accès internet se fait par mon routeur wifi) en éteignant le routeur -> pas d'accès internet garanti!
Mon Manifest comprend les lignes suivantes:
...
<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>
...
Je tiens également à noter que j'ai aussi essayé <action android:name="android.net.ConnectivityManager.CONNECTIVITY_ACTION" />
dans mon dossier manifeste sans changement et que lorsque j'ai modifié la ligne: intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false)
à intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, true)
le résultat était toujours vrai - et donc il a toujours essayé d'arrêter mon service et de ne jamais le démarrer.
Je suspecte que les extras de l'intention ne sont pas lus du tout et c'est pourquoi la valeur par défaut de getBooleanExtra()
revient toujours.
PS. Je suis sur Android 2.1
Merci!
Je connais la méthode que vous avez utilisée. Cependant, j'étais un peu surpris que beaucoup de gens ont recommandé le code que j'ai utilisé (je l'ai également lu sur un livre O'reilly que j'ai récemment acheté sur android!Si je ne trouve pas de solution avec la diffusion CONNECTIVITY_ACTION, je pense que je vais suivre votre exemple et faire une vérification dans mon service avec les méthodes de ConnectivityManager. Merci pour la réponse :) – snoopaki
Vous êtes les bienvenus @snoopaki - en fait j'aurais préféré venir avec une solution en utilisant votre méthode, mais je ne vois tout simplement pas ce qui se passe et pourquoi. – Shlublu
En fait, j'ai changé mon service en IntentService et la gestion en service du changement de connectivité était plus logique. Donc, je devrais probablement choisir votre réponse comme la bonne !! Merci :) – snoopaki