Android - Connessione di rete

Android consente alla tua applicazione di connettersi a Internet oa qualsiasi altra rete locale e ti consente di eseguire operazioni di rete.

Un dispositivo può avere vari tipi di connessioni di rete. Questo capitolo si concentra sull'utilizzo di una connessione Wi-Fi o di una rete mobile.

Verifica della connessione di rete

Prima di eseguire qualsiasi operazione di rete, devi prima verificare di essere connesso a quella rete o Internet, ecc ConnectivityManagerclasse. È necessario creare un'istanza di un oggetto di questa classe chiamandogetSystemService()metodo. La sua sintassi è data di seguito:

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

Dopo aver istanziato l'oggetto della classe ConnectivityManager, è possibile utilizzare getAllNetworkInfometodo per ottenere le informazioni di tutte le reti. Questo metodo restituisce un array diNetworkInfo. Quindi devi riceverlo in questo modo.

NetworkInfo[] info = check.getAllNetworkInfo();

L'ultima cosa che devi fare è controllare Connected Statedella rete. La sua sintassi è data di seguito:

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();
   }
}

Oltre a questi stati connessi, ci sono altri stati che una rete può raggiungere. Sono elencati di seguito:

Suor n Stato
1 Collegamento
2 Disconnesso
3 Disconnessione
4 Sospeso
5 Sconosciuto

Esecuzione di operazioni di rete

Dopo aver verificato di essere connesso a Internet, è possibile eseguire qualsiasi operazione di rete. Qui stiamo recuperando l'html di un sito web da un URL.

Android fornisce HttpURLConnection e URLclasse per gestire queste operazioni. È necessario creare un'istanza di un oggetto della classe URL fornendo il collegamento del sito Web. La sua sintassi è la seguente:

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

Dopodiché devi chiamare openConnectionmetodo della classe url e riceverlo in un oggetto HttpURLConnection. Dopodiché è necessario chiamare ilconnect metodo della classe HttpURLConnection.

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

E l'ultima cosa che devi fare è recuperare l'HTML dal sito web. Per questo useraiInputStream e BufferedReaderclasse. La sua sintassi è data di seguito:

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

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

Oltre a questo metodo di connessione, sono disponibili altri metodi nella classe HttpURLConnection. Sono elencati di seguito:

Suor n Metodo e descrizione
1

disconnect()

Questo metodo rilascia questa connessione in modo che le sue risorse possano essere riutilizzate o chiuse

2

getRequestMethod()

Questo metodo restituisce il metodo di richiesta che verrà utilizzato per effettuare la richiesta al server HTTP remoto

3

getResponseCode()

Questo metodo restituisce il codice di risposta restituito dal server HTTP remoto

4

setRequestMethod(String method)

Questo metodo Imposta il comando di richiesta che verrà inviato al server HTTP remoto

5

usingProxy()

Questo metodo restituisce se questa connessione utilizza o meno un server proxy

Esempio

L'esempio seguente mostra l'uso della classe HttpURLConnection. Crea un'applicazione di base che ti consente di scaricare HTML da una determinata pagina web.

Per sperimentare questo esempio, è necessario eseguirlo su un dispositivo reale su cui è connesso Internet Wi-Fi.

Passi Descrizione
1 Utilizzerai l'IDE di Android Studio per creare un'applicazione Android in un pacchetto com.tutorialspoint.myapplication.
2 Modifica il file src / MainActivity.java per aggiungere il codice dell'attività.
4 Modifica il file XML di layout res / layout / activity_main.xml aggiungi qualsiasi componente della GUI se necessario.
6 Modifica AndroidManifest.xml per aggiungere le autorizzazioni necessarie.
7 Esegui l'applicazione e scegli un dispositivo Android in esecuzione, installa l'applicazione su di esso e verifica i risultati.

Ecco il contenuto di 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;
   }

}

Ecco il contenuto di 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>

Ecco il contenuto di Strings.xml.

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

Ecco il contenuto di 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>

Proviamo a eseguire la tua applicazione. Presumo che tu abbia collegato il tuo attuale dispositivo mobile Android al tuo computer. Per eseguire l'app da Android Studio, apri uno dei file di attività del tuo progetto e fai clic sull'icona Esegui dalla barra degli strumenti. Prima di avviare l'applicazione, Android Studio visualizzerà la seguente finestra per selezionare un'opzione in cui si desidera eseguire l'applicazione Android.

Seleziona il tuo dispositivo mobile come opzione, quindi controlla il tuo dispositivo mobile che visualizzerà la seguente schermata:

Ora fai clic sul pulsante, controllerà la connessione Internet e scaricherà l'immagine.

Fuori sarebbe il seguente e ha recuperato il logo da Internet.