Android - Connexion réseau

Android permet à votre application de se connecter à Internet ou à tout autre réseau local et vous permet d'effectuer des opérations réseau.

Un appareil peut avoir différents types de connexions réseau. Ce chapitre se concentre sur l'utilisation d'une connexion Wi-Fi ou d'un réseau mobile.

Vérification de la connexion réseau

Avant d'effectuer des opérations réseau, vous devez d'abord vérifier que vous êtes connecté à ce réseau ou à Internet, etc. ConnectivityManagerclasse. Vous devez instancier un objet de cette classe en appelantgetSystemService()méthode. Sa syntaxe est donnée ci-dessous -

ConnectivityManager check = (ConnectivityManager) 
this.context.getSystemService(Context.CONNECTIVITY_SERVICE);

Une fois que vous instanciez l'objet de la classe ConnectivityManager, vous pouvez utiliser getAllNetworkInfométhode pour obtenir les informations de tous les réseaux. Cette méthode renvoie un tableau deNetworkInfo. Vous devez donc le recevoir comme ça.

NetworkInfo[] info = check.getAllNetworkInfo();

La dernière chose à faire est de vérifier Connected Statedu réseau. Sa syntaxe est donnée ci-dessous -

for (int i = 0; i<info.length; i++){
   if (info[i].getState() == NetworkInfo.State.CONNECTED){
      Toast.makeText(context, "Internet is connected
      Toast.LENGTH_SHORT).show();
   }
}

En dehors de ces états connectés, il existe d'autres états qu'un réseau peut atteindre. Ils sont listés ci-dessous -

Sr. Non Etat
1 De liaison
2 Débranché
3 Déconnexion
4 Suspendu
5 Inconnue

Exécution des opérations réseau

Après avoir vérifié que vous êtes connecté à Internet, vous pouvez effectuer n'importe quelle opération réseau. Ici, nous récupérons le html d'un site Web à partir d'une URL.

Android fournit HttpURLConnection et URLclass pour gérer ces opérations. Vous devez instancier un objet de classe URL en fournissant le lien du site Web. Sa syntaxe est la suivante -

String link = "http://www.google.com";
URL url = new URL(link);

Après cela, vous devez appeler openConnectionméthode de la classe url et la recevoir dans un objet HttpURLConnection. Après cela, vous devez appeler leconnect méthode de la classe HttpURLConnection.

HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.connect();

Et la dernière chose à faire est de récupérer le code HTML du site Web. Pour cela, vous utiliserezInputStream et BufferedReaderclasse. Sa syntaxe est donnée ci-dessous -

InputStream is = conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
String webPage = "",data="";

while ((data = reader.readLine()) != null){
   webPage += data + "\n";
}

En dehors de cette méthode de connexion, il existe d'autres méthodes disponibles dans la classe HttpURLConnection. Ils sont listés ci-dessous -

Sr. Non Méthode et description
1

disconnect()

Cette méthode libère cette connexion afin que ses ressources puissent être réutilisées ou fermées

2

getRequestMethod()

Cette méthode retourne la méthode de requête qui sera utilisée pour faire la requête au serveur HTTP distant

3

getResponseCode()

Cette méthode renvoie le code de réponse renvoyé par le serveur HTTP distant

4

setRequestMethod(String method)

Cette méthode Définit la commande de requête qui sera envoyée au serveur HTTP distant

5

usingProxy()

Cette méthode retourne si cette connexion utilise un serveur proxy ou non

Exemple

L'exemple ci-dessous illustre l'utilisation de la classe HttpURLConnection. Il crée une application de base qui vous permet de télécharger du HTML à partir d'une page Web donnée.

Pour expérimenter cet exemple, vous devez l'exécuter sur un appareil réel sur lequel Internet wifi est connecté.

Pas La description
1 Vous utiliserez l'IDE de studio Android pour créer une application Android sous un package com.tutorialspoint.myapplication.
2 Modifiez le fichier src / MainActivity.java pour ajouter le code d'activité.
4 Modifiez le fichier XML de mise en page res / layout / activity_main.xml, ajoutez un composant GUI si nécessaire.
6 Modifiez AndroidManifest.xml pour ajouter les autorisations nécessaires.
sept Exécutez l'application et choisissez un appareil Android en cours d'exécution, installez l'application dessus et vérifiez les résultats.

Voici le contenu de src/MainActivity.java.

package com.tutorialspoint.myapplication;

import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

import android.net.ConnectivityManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.ActionBarActivity;
import android.view.View;

import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

import java.io.IOException;
import java.io.InputStream;

import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

public class MainActivity extends ActionBarActivity {
   private ProgressDialog progressDialog;
   private Bitmap bitmap = null;
   Button b1;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      b1 = (Button) findViewById(R.id.button);

      b1.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            checkInternetConenction();
            downloadImage("http://www.tutorialspoint.com/green/images/logo.png");
         }
      });
   }

   private void downloadImage(String urlStr) {
      progressDialog = ProgressDialog.show(this, "", "Downloading Image from " + urlStr);
      final String url = urlStr;

      new Thread() {
         public void run() {
            InputStream in = null;

            Message msg = Message.obtain();
            msg.what = 1;

            try {
               in = openHttpConnection(url);
               bitmap = BitmapFactory.decodeStream(in);
               Bundle b = new Bundle();
               b.putParcelable("bitmap", bitmap);
               msg.setData(b);
               in.close();
            }catch (IOException e1) {
               e1.printStackTrace();
            }
            messageHandler.sendMessage(msg);
         }
      }.start();
   }

   private InputStream openHttpConnection(String urlStr) {
      InputStream in = null;
      int resCode = -1;

      try {
         URL url = new URL(urlStr);
         URLConnection urlConn = url.openConnection();

         if (!(urlConn instanceof HttpURLConnection)) {
            throw new IOException("URL is not an Http URL");
         }
			
         HttpURLConnection httpConn = (HttpURLConnection) urlConn;
         httpConn.setAllowUserInteraction(false);
         httpConn.setInstanceFollowRedirects(true);
         httpConn.setRequestMethod("GET");
         httpConn.connect();
         resCode = httpConn.getResponseCode();

         if (resCode == HttpURLConnection.HTTP_OK) {
            in = httpConn.getInputStream();
         }
      }catch (MalformedURLException e) {
         e.printStackTrace();
      }catch (IOException e) {
         e.printStackTrace();
      }
      return in;
   }

   private Handler messageHandler = new Handler() {
      public void handleMessage(Message msg) {
         super.handleMessage(msg);
         ImageView img = (ImageView) findViewById(R.id.imageView);
         img.setImageBitmap((Bitmap) (msg.getData().getParcelable("bitmap")));
         progressDialog.dismiss();
      }
   };

   private boolean checkInternetConenction() {
      // get Connectivity Manager object to check connection
      ConnectivityManager connec
         =(ConnectivityManager)getSystemService(getBaseContext().CONNECTIVITY_SERVICE);

      // Check for network connections
      if ( connec.getNetworkInfo(0).getState() == 
         android.net.NetworkInfo.State.CONNECTED ||
         connec.getNetworkInfo(0).getState() == 
         android.net.NetworkInfo.State.CONNECTING ||
         connec.getNetworkInfo(1).getState() == 
         android.net.NetworkInfo.State.CONNECTING ||
         connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.CONNECTED ) {
            Toast.makeText(this, " Connected ", Toast.LENGTH_LONG).show();
            return true;
         }else if (
            connec.getNetworkInfo(0).getState() == 
            android.net.NetworkInfo.State.DISCONNECTED ||
            connec.getNetworkInfo(1).getState() == 
            android.net.NetworkInfo.State.DISCONNECTED  ) {
               Toast.makeText(this, " Not Connected ", Toast.LENGTH_LONG).show();
               return false;
            }
         return false;
   }

}

Voici le contenu de activity_main.xml.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
   android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
   
   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="UI Animator Viewer"
      android:id="@+id/textView"
      android:textSize="25sp"
      android:layout_centerHorizontal="true" />
      
   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Tutorials point"
      android:id="@+id/textView2"
      android:layout_below="@+id/textView"
      android:layout_alignRight="@+id/textView"
      android:layout_alignEnd="@+id/textView"
      android:textColor="#ff36ff15"
      android:textIsSelectable="false"
      android:textSize="35dp" />
      
   <ImageView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/imageView"
      android:layout_below="@+id/textView2"
      android:layout_centerHorizontal="true" />
      
   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Button"
      android:id="@+id/button"
      android:layout_below="@+id/imageView"
      android:layout_centerHorizontal="true"
      android:layout_marginTop="76dp" />

</RelativeLayout>

Voici le contenu de Strings.xml.

<resources>
   <string name="app_name">My Application</string>
</resources>

Voici le contenu de AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.tutorialspoint.myapplication" >
   <uses-permission android:name="android.permission.INTERNET"></uses-permission>
   <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
   
   <application
      android:allowBackup="true"
      android:icon="@mipmap/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
      
      <activity
         android:name=".MainActivity"
         android:label="@string/app_name" >
         
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
         
      </activity>
        
   </application>
</manifest>

Essayons d'exécuter votre application. Je suppose que vous avez connecté votre appareil mobile Android à votre ordinateur. Pour exécuter l'application depuis Android Studio, ouvrez l'un des fichiers d'activité de votre projet et cliquez sur l' icône Exécuter dans la barre d'outils. Avant de démarrer votre application, Android studio affichera la fenêtre suivante pour sélectionner une option dans laquelle vous souhaitez exécuter votre application Android.

Sélectionnez votre appareil mobile en option, puis vérifiez votre appareil mobile qui affichera l'écran suivant -

Maintenant, cliquez simplement sur le bouton, il vérifiera la connexion Internet et téléchargera l'image.

La sortie serait la suivante et il a récupéré le logo sur Internet.