Android - połączenie sieciowe
Android pozwala aplikacji łączyć się z Internetem lub inną siecią lokalną i umożliwia wykonywanie operacji sieciowych.
Urządzenie może mieć różne typy połączeń sieciowych. Ten rozdział skupia się na korzystaniu z połączenia Wi-Fi lub sieci komórkowej.
Sprawdzanie połączenia sieciowego
Zanim wykonasz jakiekolwiek operacje sieciowe, musisz najpierw sprawdzić, czy jesteś podłączony do tej sieci lub internetu itp.Dla tego Androida zapewnia ConnectivityManagerklasa. Musisz utworzyć instancję obiektu tej klasy przez wywołaniegetSystemService()metoda. Jego składnia jest podana poniżej -
ConnectivityManager check = (ConnectivityManager)
this.context.getSystemService(Context.CONNECTIVITY_SERVICE);
Po utworzeniu wystąpienia obiektu klasy ConnectivityManager możesz użyć getAllNetworkInfometoda uzyskania informacji o wszystkich sieciach. Ta metoda zwraca tablicęNetworkInfo. Więc musisz to otrzymać w ten sposób.
NetworkInfo[] info = check.getAllNetworkInfo();
Ostatnią rzeczą, którą musisz zrobić, to sprawdzić Connected Statesieci. Jego składnia jest podana poniżej -
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();
}
}
Oprócz tych połączonych stanów istnieją inne stany, które sieć może osiągnąć. Są one wymienione poniżej -
Sr.No | Stan |
---|---|
1 | Złączony |
2 | Niepowiązany |
3 | Rozłączanie |
4 | Zawieszony |
5 | Nieznany |
Wykonywanie operacji sieciowych
Po upewnieniu się, że masz połączenie z Internetem, możesz wykonywać dowolne operacje sieciowe. Tutaj pobieramy html witryny z adresu URL.
Android zapewnia HttpURLConnection i URLdo obsługi tych operacji. Musisz utworzyć instancję obiektu klasy URL, podając link do strony internetowej. Jego składnia jest następująca -
String link = "http://www.google.com";
URL url = new URL(link);
Następnie musisz zadzwonić openConnectionmetody klasy url i otrzymaj ją w obiekcie HttpURLConnection. Następnie musisz zadzwonić doconnect metoda klasy HttpURLConnection.
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.connect();
Ostatnią rzeczą, którą musisz zrobić, jest pobranie kodu HTML ze strony internetowej. Do tego użyjeszInputStream i BufferedReaderklasa. Jego składnia jest podana poniżej -
InputStream is = conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
String webPage = "",data="";
while ((data = reader.readLine()) != null){
webPage += data + "\n";
}
Oprócz tej metody connect, w klasie HttpURLConnection dostępne są inne metody. Są one wymienione poniżej -
Sr.No | Metoda i opis |
---|---|
1 | disconnect() Ta metoda zwalnia to połączenie, aby jego zasoby mogły zostać ponownie wykorzystane lub zamknięte |
2 | getRequestMethod() Ta metoda zwraca metodę żądania, która zostanie użyta do wysłania żądania do zdalnego serwera HTTP |
3 | getResponseCode() Ta metoda zwraca kod odpowiedzi zwrócony przez zdalny serwer HTTP |
4 | setRequestMethod(String method) Ta metoda Ustawia polecenie żądania, które zostanie wysłane do zdalnego serwera HTTP |
5 | usingProxy() Ta metoda zwraca, czy to połączenie korzysta z serwera proxy, czy nie |
Przykład
Poniższy przykład demonstruje użycie klasy HttpURLConnection. Tworzy podstawową aplikację umożliwiającą pobranie HTML z danej strony internetowej.
Aby poeksperymentować z tym przykładem, musisz uruchomić go na rzeczywistym urządzeniu, do którego podłączony jest internet Wi-Fi.
Kroki | Opis |
---|---|
1 | Użyjesz Android Studio IDE do stworzenia aplikacji na Androida w pakiecie com.tutorialspoint.myapplication. |
2 | Zmodyfikuj plik src / MainActivity.java, aby dodać kod działania. |
4 | Zmodyfikuj plik XML układu res / layout / activity_main.xml, dodaj dowolny komponent GUI, jeśli jest to wymagane. |
6 | Zmodyfikuj plik AndroidManifest.xml, aby dodać niezbędne uprawnienia. |
7 | Uruchom aplikację i wybierz działające urządzenie z systemem Android, zainstaluj na nim aplikację i sprawdź wyniki. |
Oto treść 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;
}
}
Oto treść 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>
Oto treść Strings.xml.
<resources>
<string name="app_name">My Application</string>
</resources>
Oto treść 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>
Spróbujmy uruchomić Twoją aplikację. Zakładam, że podłączyłeś swoje rzeczywiste urządzenie mobilne z systemem Android do komputera. Aby uruchomić aplikację z Android Studio, otwórz jeden z plików aktywności projektu i kliknij
Wybierz swoje urządzenie mobilne jako opcję, a następnie sprawdź swoje urządzenie mobilne, które wyświetli następujący ekran -
Teraz wystarczy kliknąć przycisk, sprawdzi połączenie internetowe, a także pobierze obraz.
Wyglądałoby to następująco i ściągnęło logo z internetu.