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 :

[Question] Comment savoir si le téléphone est connecté à Internet


Sujet :

Android

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut [Question] Comment savoir si le téléphone est connecté à Internet
    Bonjour,

    Voila j'ai créé une application qui permet de s'auto-connecté à un portail capacitif. Tout fonctionne correctement sauf une choses.

    En faite j'aimerais savoir si le téléphone est déjà connecté au portail ou pas. Pour ce faire c'est relativement simple. Il me faut savoir si le téléphone à accès à internet. J'ai donc trouvé en cherchant plusieurs solution.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public boolean isConnectedOnInternet()
    	{
    		ConnectivityManager connManager = (ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE);
    		NetworkInfo wifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
    		return wifi.isConnected() && wifi.isAvailable();
    	}
    Celle première solution, ne fonctionne pas. En effet, la fonction me revoit true si je suis connecté à un réseau (qui n'est pas forcément connecté à internet). Ou alors est-ce moi qui l'utilise mal ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public boolean isConnectedOnInternet()
    	{
     
    		try {
    			URL UrlTestConnection = new URL("http://www.google.com");
    			URLConnection connOk = UrlTestConnection.openConnection();
    			connOk.setConnectTimeout(3 * 1000);
    			connOk.connect();
    			return true;
    		} catch (IOException e) {
    			return false;
    		}
    	}
    Cette solution fonctionne. Mais petit problème !

    Mon application se doit d'être réactif et détecter à la seconde près l’état du réseau et de la connexion à internet.

    Pour ce faire, j'utilise un timer qui execute des tests toutes les secondes. Le 1er teste est de voir si on est connecté au réseau wifi qui demande une identification si cela est le cas, il nous faut savoir si on y est déjà identifié. il faut donc savoir si on peut avoir accès à internet et j'utilise alors la function isConnectedOnInternet(). Dans le meilleur des cas, elle ne s'exécutera que toutes les 3 secondes (car limite du timeout) mais le pire des cas est qu'elle s'exécute tout les secondes (mon timer de départ).

    Je me pose alors plusieurs questions :

    Il y a t'il une autre façon de faire plus "correcte" ?
    Lorsque la connexion est ouverte (connOK.connect()) est ce que cette méthode "télécharge" toute la page google ou pas ? Autrement dis, est-ce que cela bouffe beaucoup de data ?
    Je ne sais pas si tout est compréhensible. (J’espère que oui )

    Je vous remercie d'avance pour vos réponses et vos conseils

    Tibou36

  2. #2
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Il existe les BroadcastReceiver pour recevoir de la couche réseau les connexions (ou déconnexions) éventuelles. Nul besoin de tester toutes les secondes (ce qui de plus va vider la batterie à une vitesse vertigineuse).

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Merci à vous pour votre réponse rapide.

    Je me suis documenté sur BroadcastReceiver en question j'ai donc fais comme 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
    public class InternetReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(final Context context, final Intent intent) {
    		 Log.d("LogApp", "Receiver");		    		 
        	final ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            final android.net.NetworkInfo wifi = connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
    	 	Log.d("LogApp", "Etat " + wifi.isAvailable());		    		 
    	    if (wifi.isAvailable()) {
    	    	//Mon Code si connexion disponible
            }
            else
            {
    	    	//Mon Code si connexion indisponible
            }
        }
    }
    AndroidManifest
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    	<application
    		android:allowBackup="true"
    		android:allowClearUserData="true"
    		android:hardwareAccelerated="false"
    		android:icon="@drawable/ic_launcher"
    		android:label="@string/app_name"
    		android:theme="@style/AppTheme" >
    		<receiver android:name="com.Bewweb.MyAppName.InternetReceiver" >
    			<intent-filter>
    				<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    			</intent-filter>
    		</receiver>
    	</application>
    Mais lorsque que je déconnecte mon routeur d'internet, il ne se déclenche pas.

    Edit : en faite, il détecte quand j'active ou non le wifi ou quand je me connecte mais pas quand je suis connecté à internet ou non.

    Je comment avec le développement android

  4. #4
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Heu mais ça c'est parfaitement normal....

    Parce que bon, il n'y a pas que le routeur, il y a le modem derrière, la ligne, le DSLAM au bout de la ligne, le NRO, le routeur du provider...

    Enfin bref... "connecté à Internet" ne veut rien dire... "connecté à un serveur lambda" éventuellement mais la faut n'incombe peut etre pas au device (mais le serveur qui est down, ou le routeur avant le serveur qui est down, ...).

    Enfin, voilà... quoi

    Il est possible à un instant "T" de savoir si on peut contacter une machine "M" quelque part dans le monde, mais rien ne dit qu'à T+1 ce sera encore le cas, ou que si on peut contacter "M" on pourra contacter "N".

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Oui c'est vrai. Prenons le problème dans un autre sens.

    Je dois donc savoir quand je suis connecté au wifi X si les services (internet, ssh, ...) sont disponibles. Deux situations sont possible

    - Soit je me suis identifié et dans ce cas, j'ai accès à internet. Comme vous l'avez bien dit, "Connecté à internet" ne veux pas dire grand chose mais pour faire simple, on considère que le smartphone est "connecté à internet" ssi on sait accéder à un serveur Y ou à un serveur Z. Le taux de probabilité que deux serveurs soient simultanément inaccessibles étant assez faible on considère cette condition valide.
    - Soit je ne suis pas identifié et dans ce cas, toutes requêtes quel qu’elles soient me redirige vers l'interface d'identification. Autrement dis, pour toutes tentative de connexion au serveur Y ou Z on se fait rediriger sur le sur le serveur X.
    Tout cela ce passe à un instant t+s (0<= s; s étant chaque seconde si possible).


    J'ai pu constater que lorsque je me connecte à ce wifi, mon téléphone me notifie qu'il faut se logger (si je ne me suis pas loggé précédemment). Comment détecte t'il que je me trouve sur un wifi qui demande une identification ?

    Aussi non quelqu'un à une autre idée pour permettre de détecter quand l'identification est demandé sachant que le portail réapparaît un peut aléatoirement ? Car je sèche un peut :/ je ne demande pas un algo complet :p juste des idées

    Merci d'avance

    Tibou

Discussions similaires

  1. Comment savoir si un user est connecté
    Par Bud44 dans le forum Langage
    Réponses: 5
    Dernier message: 18/11/2009, 11h57
  2. Réponses: 0
    Dernier message: 08/11/2008, 19h21
  3. [FAQ] Comment savoir si l'on est connecté ou non à Internet
    Par Droïde Système7 dans le forum API, COM et SDKs
    Réponses: 1
    Dernier message: 10/09/2008, 15h38
  4. Réponses: 1
    Dernier message: 01/06/2008, 04h58
  5. [Activ Sync]Comment savoir sir le PPC est connecter en usb ?
    Par Yotho dans le forum Windows Mobile
    Réponses: 3
    Dernier message: 25/07/2007, 16h22

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