IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Détecter perte de réseau dans un service


Sujet :

Android

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 55
    Points : 43
    Points
    43
    Par défaut Détecter perte de réseau dans un service
    Bonjour,

    Ma problématique est la suivante: je cherche à pouvoir connaître la perte de connection à internet.
    Sachant que l'on peut être connecté en WIFI ou 3G.
    L'idée serai de gérer cela dans un service ou mieux selon le mécanisme mis en place.
    On avertirai l'utilisateur qu'il ne peut pas effectuer de nouvelle requêtes tant qu'il n'a pas retrouvé une connection à internet.

    Merci.
    Drlord.

  2. #2
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    371
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 371
    Points : 45
    Points
    45
    Par défaut
    jolie question, ça peut m'aider aussi, j'attends aussi la reponse

  3. #3
    Membre expert
    Avatar de moritan
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2005
    Messages
    687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2005
    Messages : 687
    Points : 3 135
    Points
    3 135
    Par défaut
    Pour faire ça bien il te faut un service et un broadcast receiver.

    Dans ton manifest il faut configurer le receiver pour réagir à l'événement
    CONNECTIVITY_CHANGE par exemple, il y en a d'autre par exemple lié au wifi ou autre, faut regarder la doc.

    Dans ton receiver tu détectes le type de changement et tu transmets l'info à ton service.
    C'est ton service qui doit faire la notif à l'utilisateur.
    Le traitement dans le receiver doit être le plus rapide possible si tu veux pas d'ANR.

    Il faut aussi penser à ajouter les permissions qui vont bien par exemple permission android.permission.ACCESS_NETWORK_STATE et android.permission.ACCESS_WIFI_STATE

    Le broadcastreceiver peut aussi être directement déclaré dans ton activity mais c'est moins clean (de mon point de vue)

    Pour plus d'info :
    http://developer.android.com/referen...tyManager.html
    http://developer.android.com/referen...tReceiver.html

  4. #4
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 55
    Points : 43
    Points
    43
    Par défaut
    Merci pour la réponse.
    J'ai implémenter ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    public class ConnexionReceiver extends BroadcastReceiver {
     
    	private String tag = "ConnexionReceiver";
     
     
    	@Override
    	public void onReceive(Context context, Intent intent) {
    		Log.d(tag, "MANAGE CONNEXION – onReceive connexion changed");
    		NetworkInfo networkInfo = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
    		if (networkInfo != null) {
    			State state = networkInfo.getState();
    			String typeName = networkInfo.getTypeName();
    			Log.d(tag, "connexion data change NetworkInfo:" + networkInfo);
    			Log.d(tag, "connexion data change NetworkInfo::State: " + state);
    			Log.d(tag, "connexion data change NetworkInfo::TypeName: " + typeName);
    		}
    	}
    }
    et dans le Manifest:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <receiver
                android:name="com.test.service.ConnexionReceiver"
                android:enabled="true"
                android:priority="0" >
                <intent-filter>
                    <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
                </intent-filter>
    </receiver>
    J'ai constaté ceci quand je suis connecté en 3G et que je bascule en WIFI
    03-16 11:30:54.842: D/ConnexionReceiver(13362): MANAGE CONNEXION – onReceive connexion changed
    03-16 11:30:54.850: D/ConnexionReceiver(13362): connexion data change NetworkInfo:NetworkInfo: type: WIFI[HSDPA], state: CONNECTED/CONNECTED, reason: (unspecified), extra: (none), roaming: false, failover: false, isAvailable: true
    03-16 11:30:54.850: D/ConnexionReceiver(13362): connexion data change NetworkInfo::State: CONNECTED
    03-16 11:30:54.850: D/ConnexionReceiver(13362): connexion data change NetworkInfo::TypeName: WIFI
    03-16 11:30:55.334: D/ConnexionReceiver(13362): MANAGE CONNEXION – onReceive connexion changed
    03-16 11:30:55.334: D/ConnexionReceiver(13362): connexion data change NetworkInfo:NetworkInfo: type: mobile[HSDPA], state: DISCONNECTED/DISCONNECTED, reason: dataDisabled, extra: orange, roaming: false, failover: false, isAvailable: true
    03-16 11:30:55.334: D/ConnexionReceiver(13362): connexion data change NetworkInfo::State: DISCONNECTED
    03-16 11:30:55.338: D/ConnexionReceiver(13362): connexion data change NetworkInfo::TypeName: mobile
    03-16 11:30:55.525: D/ConnexionReceiver(13362): MANAGE CONNEXION – onReceive connexion changed
    03-16 11:30:55.525: D/ConnexionReceiver(13362): connexion data change NetworkInfo:NetworkInfo: type: WIFI[HSDPA], state: CONNECTED/CONNECTED, reason: (unspecified), extra: (none), roaming: false, failover: false, isAvailable: true
    03-16 11:30:55.525: D/ConnexionReceiver(13362): connexion data change NetworkInfo::State: CONNECTED
    03-16 11:30:55.525: D/ConnexionReceiver(13362): connexion data change NetworkInfo::TypeName: WIFI
    et quand on bascule du WIFI vers 3G:
    03-16 11:40:14.498: D/ConnexionReceiver(13362): MANAGE CONNEXION – onReceive connexion changed
    03-16 11:40:14.498: D/ConnexionReceiver(13362): connexion data change NetworkInfo:NetworkInfo: type: WIFI[HSDPA], state: DISCONNECTED/DISCONNECTED, reason: (unspecified), extra: (none), roaming: false, failover: false, isAvailable: false
    03-16 11:40:14.498: D/ConnexionReceiver(13362): connexion data change NetworkInfo::State: DISCONNECTED
    03-16 11:40:14.498: D/ConnexionReceiver(13362): connexion data change NetworkInfo::TypeName: WIFI
    03-16 11:40:20.107: D/ConnexionReceiver(13362): MANAGE CONNEXION – onReceive connexion changed
    03-16 11:40:20.107: D/ConnexionReceiver(13362): connexion data change NetworkInfo:NetworkInfo: type: mobile[HSDPA], state: CONNECTED/CONNECTED, reason: apnSwitched, extra: orange, roaming: false, failover: false, isAvailable: true
    03-16 11:40:20.107: D/ConnexionReceiver(13362): connexion data change NetworkInfo::State: CONNECTED
    03-16 11:40:20.107: D/ConnexionReceiver(13362): connexion data change NetworkInfo::TypeName: mobile
    On remarque qu'il y a des déconnections ce qui est tout a fait normal.
    Au début je voulais mettre en place une tempo pour ne pas avertir/bloquer l'utilisateur mais je pense qu'il est plus intéressant de pouvoir bloquer par exemple des appels à internet (webservice ou autre...).

    Il me manque juste de détecter l'état au démarrage de l'application

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. détecter perte réseau
    Par Denn's dans le forum MFC
    Réponses: 2
    Dernier message: 08/03/2007, 12h08
  2. [Réseau] Détecter perte de communication
    Par Snark dans le forum Réseau
    Réponses: 6
    Dernier message: 05/01/2007, 20h54
  3. [MFC] Perte du clw dans un projet ATL
    Par Yapadavaro dans le forum MFC
    Réponses: 2
    Dernier message: 29/04/2005, 14h01
  4. Réponses: 2
    Dernier message: 02/08/2004, 17h34
  5. Du réseau dans les jeux
    Par Mathieu.J dans le forum Développement
    Réponses: 3
    Dernier message: 07/05/2004, 16h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo