Partage
  • Partager sur Facebook
  • Partager sur Twitter

Test de connexion Serveur permanente

    21 mai 2013 à 13:04:43

    Bonjour aux développeurs expérimentés !

    Dans toute mon application j'aimerais tester à chaque fois si il y a bien une connexion avec le serveur (BDD Externe) et si il en a une je fais X sinon je fais Y.

    Avez-vous une solution ? (méthode etc.)

    EDIT : comme par exemple quand on est dans un jeu et que notre connexion plante on est déconnecté et on revient à l'accueil

    -
    Edité par cleandroid22kh 21 mai 2013 à 13:05:53

    • Partager sur Facebook
    • Partager sur Twitter
      21 mai 2013 à 14:20:50

      public class NetworkStateReceiver extends BroadcastReceiver {
          public void onReceive(Context context, Intent intent) {
           super.onReceive(context, intent);
           Log.d("app","Network connectivity change");
           if(intent.getExtras()!=null) {
              NetworkInfo ni=(NetworkInfo) intent.getExtras().get(ConnectivityManager.EXTRA_NETWORK_INFO);
              if(ni!=null && ni.getState()==NetworkInfo.State.CONNECTED) {
                  Log.i("app","Network "+ni.getTypeName()+" connected");
              } else if(intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY,Boolean.FALSE)) {
                  Log.d("app","There's no network connectivity");
              }
         }
      }

      A implementer dans ton activite
      • Partager sur Facebook
      • Partager sur Twitter
        21 mai 2013 à 15:26:56

        Dac je te remercie beaucoup :) une fois testé je mets en résolu !
        • Partager sur Facebook
        • Partager sur Twitter
          23 mai 2013 à 13:10:36

          Bon je viens d'essayé mais j'ai plusieurs problèmes.

          J'ai créer une classe que j'ai nommé  NetworkStateReceiver j'ai mis ton code.

          Déjà j'ai ceci qui est déprécié ".EXTRA_NETWORK_INFO"

          ensuite

          j'ai une erreur sur le super.onReceive(context, intent) en gros il ne peux pas invoqué cette méthode pour le type
          BroadcastReceiver une solution ? :D

          • Partager sur Facebook
          • Partager sur Twitter
            23 mai 2013 à 13:13:53

            Car j'aimerais tester avant chaque envoie ou réception de data si j'ai soit une connexion avec le serveur ou une connexion à internet.
            • Partager sur Facebook
            • Partager sur Twitter
              23 mai 2013 à 13:19:05

              http://www.siteduzero.com/informatique/tutoriels/creez-des-applications-pour-android/surveiller-le-reseau j'aurais peut-être ma solution ici je regarde ça ^^

              EDIT1 : Pour résumer je veux tester si il y a une connexion entre mon serveur (mysql) et le téléphone android (si oui il envoie les données)

              -
              Edité par cleandroid22kh 23 mai 2013 à 13:34:09

              • Partager sur Facebook
              • Partager sur Twitter
                23 mai 2013 à 16:31:51

                Est-ce que ceci :

                public boolean isOnline() {
                    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
                    NetworkInfo netInfo = cm.getActiveNetworkInfo();
                    if (netInfo != null && netInfo.isConnected()) {
                        try {
                            URL url = new URL("http://www.google.com");
                            HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
                            urlc.setConnectTimeout(3000);
                            urlc.connect();
                            if (urlc.getResponseCode() == 200) {
                                return new Boolean(true);
                            }
                        } catch (MalformedURLException e1) {
                            // TODO Auto-generated catch block
                            e1.printStackTrace();
                        } catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }
                    return false;
                }

                Peut-être une solution la plus optimale ????? en gros je modifie cette méthode en Asyntask et ensuite si je récupère true je lance mon autre asyntask qui envoie les données sinon je lance une boite dialog et je vais à l'accueil de mon appli.

                -
                Edité par cleandroid22kh 23 mai 2013 à 16:32:44

                • Partager sur Facebook
                • Partager sur Twitter
                  23 mai 2013 à 16:34:11

                  Pourquoi ne pas utiliser un service ? Cette solution me semble un peut être du bricolage ce n'est pas très propre comme check connexion surtout que tu as les connectivitymanager pour ce genre de cas :p

                  -
                  Edité par gruntsy 23 mai 2013 à 16:35:23

                  • Partager sur Facebook
                  • Partager sur Twitter
                    23 mai 2013 à 16:44:59

                    Ouai c'est ce que je me disais que c'était bricolage même si ça peut fonctionner :x

                    En plus je serais obliger de mettre ça dans chaque activité <>

                    Hmmmm je suis passé effectivement là dessus connectivitymanager. Enfin sans regarder en profondeur.

                    Aurais-tu un tutoriel pour expliquer un test de Connectivité entre justement l'application sur le mobile et le serveur à l'aide de la classe connectivitymanager ? Que plus tard je mettrais dans un service.

                    Si tu pouvais m'aiguiller :x Tu sauveras peut-être mon stage xd

                    • Partager sur Facebook
                    • Partager sur Twitter
                      23 mai 2013 à 16:51:41

                      Enfin je te demande ps de me donner de code et crois moi c'est pas de la feignasse :x
                      • Partager sur Facebook
                      • Partager sur Twitter
                        23 mai 2013 à 16:53:14

                        Non je me doute bien je suis en train de rechercher les tutos que j'avais fait je sais pas si j'ai gardé les liens :p
                        • Partager sur Facebook
                        • Partager sur Twitter
                          23 mai 2013 à 17:05:14

                          Dac je te remercie de chercher x) je fais la même :D En gros c'est pour gérer des connexions users tout au long de la vie de l'application ou avant d'envoyer des données et recevoir des données de ce serveur php par exemple.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            23 mai 2013 à 17:14:35

                            Alors déjà ça  : 

                            https://groups.google.com/forum/?fromgroups#!topic/android-beginners/1U2PGiT97xs

                            comme ça tu sauras stopper ton service avant mêle savoir t'en servir ^^

                            bon par précaution même si je pense que tu l'as déjà vu celui du site du zéro http://www.siteduzero.com/informatique/tutoriels/creez-des-applications-pour-android/creer-un-service-1

                            celui ci est celui du livre que j'ai http://nbenbourahla.developpez.com/tutoriels/android/services-sous-android/

                            http://developer.android.com/reference/android/app/Service.html

                            il y a un autre lien dont je m'étais servi que je ne t'ai pas retrouvé mais avec ça tu vas pouvoir aller loin normalement et surtout n'hésite pas à te balader dans la doc même si elle est en anglais :)

                            • Partager sur Facebook
                            • Partager sur Twitter
                              23 mai 2013 à 17:20:48

                              Dac je vais lire tout ça, tester etc. Je te remercie !! (oui il y avait des liens que j'avais déjà).

                              Dernière question donc si je mets par exemple ma méthode du dessous dans un service ça peut le faire ? :D

                              Genre :

                              - Je lance mon service

                              - Si le service détecte une connexion je lance mon Asyntask  (faudrait qu'il soit lancé à partir de mon activité et non dans le service) qui envoie les datas.   Ensuite je coupe le service.

                              - Si non je remet l'user à l'accueil. Ensuite je coupe le service

                              (oui je n'ai fait qu'un service dans mon expérience android et c'était très rapide...)

                              -
                              Edité par cleandroid22kh 23 mai 2013 à 17:38:44

                              • Partager sur Facebook
                              • Partager sur Twitter
                                24 mai 2013 à 8:20:00

                                Je t'avouerai que je n'ai jamais essayé de combiner service et async task je pense que ça marcherait pour ma part comme je fais seulement des appels ws et que je n'ai jamais besoin de tester ma connexion sur la durée je reste sur les asyncTask mais en théorie cela devrait fonctionner en utilisant le service juste pour checker et l'asyncTask pour les traitement comme tu veux le faire
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  24 mai 2013 à 9:12:29

                                  arf x) Disons que je dois tester la connexion avec un serveur non pas sur la durée aussi mais sur la période ou le service se lance.

                                  (Je te remercie pour tes réponses et de perdre ton temps à m'aider...)

                                  J'ai testé avec un IntentService mais je n'arrive pas à récupérer une valeur par exemple un boolean de connexion.

                                  Mon code :

                                  Ma classe main (qui lance la première activité)

                                  package com.example.service;
                                  
                                  import android.app.Activity;
                                  import android.content.Intent;
                                  import android.os.Bundle;
                                  
                                  public class MainActivity extends Activity {
                                  
                                  	public boolean connexion = false;
                                  	
                                  	@Override
                                  	public void onCreate(Bundle savedInstanceState) {
                                  		super.onCreate(savedInstanceState);
                                  		setContentView(R.layout.activity_main);
                                  		Intent intent = new Intent(MainActivity.this, intentService.class);
                                  		intent.putExtra("testConnexion", connexion);
                                  		startService(intent);
                                  		
                                  		/*
                                  		 * ICI JE DOIS RECUPERER LA VALEUR DE CONNEXION ET ATTENDRE CETTE VALEUR POUR CONTINUER
                                  		 */
                                  		
                                  		/*
                                  		 *  SI LA VALEUR EST = TRUE JE LANCE l'ASYNCTASK QUI LUI SE CHARGERA D'ENVOYER LES DATA
                                  		 *  l'asynctask se trouvera en classe privé dans cette activité (MainActivity) 
                                  		 */
                                  		
                                  		/*
                                  		 * SI LA VALEUR EST = FALSE JE NE LANCE PAS MON ASYNTASK ET JE FAIS UN RETOUR A UNE AUTRE ACTIVITE (Accueil par exemple)
                                  		 */
                                  		
                                  		
                                  	}
                                  }


                                  Mon Service :

                                  package com.example.service;
                                  
                                  import java.io.IOException;
                                  import java.net.HttpURLConnection;
                                  import java.net.MalformedURLException;
                                  import java.net.SocketTimeoutException;
                                  import java.net.URL;
                                  
                                  import android.app.IntentService;
                                  import android.content.Context;
                                  import android.content.Intent;
                                  import android.net.ConnectivityManager;
                                  import android.net.NetworkInfo;
                                  import android.os.Bundle;
                                  import android.util.Log;
                                  
                                  public class intentService extends IntentService
                                  {
                                  
                                  	private boolean connexion;
                                  
                                  	public intentService() {
                                  		super("Test connexion");
                                  	}
                                  
                                  	@Override
                                  	protected void onHandleIntent(Intent intent) {
                                  		Bundle extras = intent.getExtras();
                                  		if (extras != null) {   
                                  			connexion = extras.getBoolean("testConnexion");
                                  		}
                                  		
                                  		Thread t = new Thread() {
                                  			public void run() {
                                  				ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
                                  			    NetworkInfo netInfo = cm.getActiveNetworkInfo();
                                  			    if (netInfo != null && netInfo.isConnected()) {
                                  			        try {
                                  			            URL url = new URL("http://192.168.99.54/");
                                  			            HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
                                  			            urlc.setConnectTimeout(3000);
                                  			            urlc.connect();
                                  	
                                  			            if (urlc.getResponseCode() == 200) {
                                  			            	connexion = true;
                                  			            	Log.i(" CONNEXION ", "OK " + connexion);
                                  			            }
                                  			        } catch (SocketTimeoutException eConnect) {
                                  			        	Log.i(" CONNEXION ", " NO OK " + connexion);
                                  			        	
                                  			        } catch (MalformedURLException e1) {
                                  			            e1.printStackTrace();
                                  			            
                                  			        } catch (IOException e) {
                                  
                                  			            e.printStackTrace();
                                  			        }
                                  			    }
                                  			}
                                  		};
                                  		t.run();
                                  		
                                  		
                                  		
                                  	}
                                  
                                  
                                  }
                                  

                                  Donc comme tu l'as compris c'est cette ligne là que je n'arrive pas à mettre en oeuvre :

                                  /*
                                  		 * ICI JE DOIS RECUPERER LA VALEUR DE CONNEXION ET ATTENDRE CETTE VALEUR POUR CONTINUER
                                  		 */

                                   je continue à chercher x) si tu as une idée ? x)



                                  -
                                  Edité par cleandroid22kh 24 mai 2013 à 9:14:22

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    24 mai 2013 à 9:22:42

                                    Bien sûr je peux aussi lancer le service dans l'asyntask qui envoie les datas et attendre la valeur de ce boolean pour continuer l'asyntask sinon je le stop avant qu'il envoie les datas. (ce qui simule que l'user n'est pas connecté avec le serveur au moment de l'envoie)
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      24 mai 2013 à 9:48:10

                                      En fait il y a une méthode avec les services qui fait que quand tu le lances il te renvoie des résultats en continu. Et tu réagis plus tard en fonction. Je t'ai mp pour que ce soit plus pratique :p

                                      -
                                      Edité par gruntsy 24 mai 2013 à 9:49:09

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        24 mai 2013 à 14:34:38

                                        Quellqu'un a t-il une solution pour test une connexion avec un serveur avant chaque envoie de DATA avec un serveur WAMP ? :x

                                        (Je ne demande pas une méthode pour test une connexion avec le serveur  ===) voir plus haut le message que j'ai posté avec la méthode isOnline();

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          24 mai 2013 à 16:14:51

                                          je trouve que c'est dommage qu'il n'est pas plus de tuto Android sur le réseau et la sécurité :x
                                          • Partager sur Facebook
                                          • Partager sur Twitter

                                          Test de connexion Serveur permanente

                                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                          • Editeur
                                          • Markdown