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.