Android - Netzwerkverbindung
Mit Android kann Ihre Anwendung eine Verbindung zum Internet oder einem anderen lokalen Netzwerk herstellen und Netzwerkvorgänge ausführen.
Ein Gerät kann verschiedene Arten von Netzwerkverbindungen haben. Dieses Kapitel konzentriert sich auf die Verwendung einer Wi-Fi oder einer mobilen Netzwerkverbindung.
Überprüfen der Netzwerkverbindung
Bevor Sie Netzwerkvorgänge ausführen, müssen Sie zunächst überprüfen, ob Sie mit diesem Netzwerk oder Internet usw. verbunden sind ConnectivityManagerKlasse. Sie müssen ein Objekt dieser Klasse durch Aufrufen instanziierengetSystemService()Methode. Die Syntax ist unten angegeben -
ConnectivityManager check = (ConnectivityManager)
this.context.getSystemService(Context.CONNECTIVITY_SERVICE);
Sobald Sie das Objekt der ConnectivityManager-Klasse instanziiert haben, können Sie es verwenden getAllNetworkInfoMethode, um die Informationen aller Netzwerke zu erhalten. Diese Methode gibt ein Array von zurückNetworkInfo. Also muss man es so erhalten.
NetworkInfo[] info = check.getAllNetworkInfo();
Das Letzte, was Sie tun müssen, ist zu überprüfen Connected Statedes Netzwerks. Die Syntax ist unten angegeben -
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();
}
}
Abgesehen von diesen verbundenen Zuständen gibt es andere Zustände, die ein Netzwerk erreichen kann. Sie sind unten aufgeführt -
Sr.Nr. | Zustand |
---|---|
1 | Anschließen |
2 | Getrennt |
3 | Trennen |
4 | Suspendiert |
5 | Unbekannt |
Netzwerkoperationen durchführen
Nachdem Sie überprüft haben, ob Sie mit dem Internet verbunden sind, können Sie einen beliebigen Netzwerkvorgang ausführen. Hier rufen wir das HTML einer Website von einer URL ab.
Android bietet HttpURLConnection und URLKlasse, um diese Operationen zu behandeln. Sie müssen ein Objekt der URL-Klasse instanziieren, indem Sie den Link der Website angeben. Die Syntax lautet wie folgt:
String link = "http://www.google.com";
URL url = new URL(link);
Danach müssen Sie anrufen openConnectionMethode der URL-Klasse und empfangen sie in einem HttpURLConnection-Objekt. Danach müssen Sie die anrufenconnect Methode der HttpURLConnection-Klasse.
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.connect();
Und das Letzte, was Sie tun müssen, ist, den HTML-Code von der Website abzurufen. Dafür werden Sie verwendenInputStream und BufferedReaderKlasse. Die Syntax ist unten angegeben -
InputStream is = conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
String webPage = "",data="";
while ((data = reader.readLine()) != null){
webPage += data + "\n";
}
Neben dieser Verbindungsmethode stehen in der Klasse HttpURLConnection weitere Methoden zur Verfügung. Sie sind unten aufgeführt -
Sr.Nr. | Methode & Beschreibung |
---|---|
1 | disconnect() Diese Methode gibt diese Verbindung frei, sodass ihre Ressourcen entweder wiederverwendet oder geschlossen werden können |
2 | getRequestMethod() Diese Methode gibt die Anforderungsmethode zurück, mit der die Anforderung an den Remote-HTTP-Server gesendet wird |
3 | getResponseCode() Diese Methode gibt den vom Remote-HTTP-Server zurückgegebenen Antwortcode zurück |
4 | setRequestMethod(String method) Diese Methode Legt den Anforderungsbefehl fest, der an den Remote-HTTP-Server gesendet wird |
5 | usingProxy() Diese Methode gibt zurück, ob diese Verbindung einen Proxyserver verwendet oder nicht |
Beispiel
Das folgende Beispiel zeigt die Verwendung der HttpURLConnection-Klasse. Es wird eine Basisanwendung erstellt, mit der Sie HTML von einer bestimmten Webseite herunterladen können.
Um mit diesem Beispiel zu experimentieren, müssen Sie dies auf einem tatsächlichen Gerät ausführen, auf dem eine WLAN-Verbindung besteht.
Schritte | Beschreibung |
---|---|
1 | Mit der Android Studio-IDE erstellen Sie eine Android-Anwendung unter dem Paket com.tutorialspoint.myapplication. |
2 | Ändern Sie die Datei src / MainActivity.java, um Aktivitätscode hinzuzufügen. |
4 | Ändern Sie die Layout-XML-Datei res / layout / activity_main.xml und fügen Sie bei Bedarf eine beliebige GUI-Komponente hinzu. |
6 | Ändern Sie AndroidManifest.xml, um die erforderlichen Berechtigungen hinzuzufügen. |
7 | Führen Sie die Anwendung aus und wählen Sie ein laufendes Android-Gerät aus. Installieren Sie die Anwendung darauf und überprüfen Sie die Ergebnisse. |
Hier ist der Inhalt von 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;
}
}
Hier ist der Inhalt von 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>
Hier ist der Inhalt von Strings.xml.
<resources>
<string name="app_name">My Application</string>
</resources>
Hier ist der Inhalt von 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>
Versuchen wir, Ihre Anwendung auszuführen. Ich gehe davon aus, dass Sie Ihr aktuelles Android Mobile-Gerät mit Ihrem Computer verbunden haben. Um die App von Android Studio aus auszuführen, öffnen Sie eine der Aktivitätsdateien Ihres Projekts und klicken Sie in der Symbolleiste auf das
Wählen Sie Ihr Mobilgerät als Option aus und überprüfen Sie Ihr Mobilgerät, das den folgenden Bildschirm anzeigt:
Klicken Sie jetzt einfach auf die Schaltfläche. Es wird die Internetverbindung überprüft und das Bild heruntergeladen.
Out wäre wie folgt und es hat das Logo aus dem Internet geholt.