Android - Kết nối mạng

Android cho phép ứng dụng của bạn kết nối với internet hoặc bất kỳ mạng cục bộ nào khác và cho phép bạn thực hiện các hoạt động mạng.

Một thiết bị có thể có nhiều loại kết nối mạng khác nhau. Chương này tập trung vào việc sử dụng Wi-Fi hoặc kết nối mạng di động.

Kiểm tra kết nối mạng

Trước khi bạn thực hiện bất kỳ hoạt động mạng nào, trước tiên bạn phải kiểm tra xem bạn đã kết nối với mạng hoặc internet đó chưa, v.v. Đối với android này cung cấp ConnectivityManagerlớp học. Bạn cần khởi tạo một đối tượng của lớp này bằng cách gọigetSystemService()phương pháp. Cú pháp của nó được đưa ra dưới đây:

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

Khi bạn khởi tạo đối tượng của lớp ConnectivityManager, bạn có thể sử dụng getAllNetworkInfophương pháp lấy thông tin của tất cả các mạng. Phương thức này trả về một mảngNetworkInfo. Vì vậy, bạn phải nhận nó như thế này.

NetworkInfo[] info = check.getAllNetworkInfo();

Điều cuối cùng bạn cần làm là kiểm tra Connected Statecủa mạng. Cú pháp của nó được đưa ra dưới đây:

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

Ngoài các trạng thái được kết nối này, mạng có thể đạt được các trạng thái khác. Chúng được liệt kê dưới đây -

Sr.No Tiểu bang
1 Đang kết nối
2 Đã ngắt kết nối
3 Ngắt kết nối
4 Đình chỉ
5 không xác định

Thực hiện các hoạt động mạng

Sau khi kiểm tra rằng bạn đã kết nối với Internet, bạn có thể thực hiện bất kỳ thao tác mạng nào. Ở đây chúng tôi đang tìm nạp html của một trang web từ một url.

Android cung cấp HttpURLConnectionURLlớp để xử lý các hoạt động này. Bạn cần khởi tạo một đối tượng của lớp URL bằng cách cung cấp liên kết của trang web. Cú pháp của nó như sau:

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

Sau đó bạn cần gọi openConnectionphương thức của lớp url và nhận nó trong một đối tượng HttpURLConnection. Sau đó, bạn cần gọiconnect phương thức của lớp HttpURLConnection.

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

Và điều cuối cùng bạn cần làm là tìm nạp HTML từ trang web. Đối với điều này, bạn sẽ sử dụngInputStreamBufferedReaderlớp học. Cú pháp của nó được đưa ra dưới đây:

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

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

Ngoài phương thức kết nối này, còn có các phương thức khác có sẵn trong lớp HttpURLConnection. Chúng được liệt kê dưới đây -

Sr.No Phương pháp & mô tả
1

disconnect()

Phương thức này giải phóng kết nối này để tài nguyên của nó có thể được sử dụng lại hoặc bị đóng

2

getRequestMethod()

Phương thức này trả về phương thức yêu cầu sẽ được sử dụng để thực hiện yêu cầu đến máy chủ HTTP từ xa

3

getResponseCode()

Phương thức này trả về mã phản hồi do máy chủ HTTP từ xa trả về

4

setRequestMethod(String method)

Phương thức này Đặt lệnh yêu cầu sẽ được gửi đến máy chủ HTTP từ xa

5

usingProxy()

Phương thức này trả về việc kết nối này có sử dụng máy chủ proxy hay không

Thí dụ

Ví dụ dưới đây minh họa việc sử dụng lớp HttpURLConnection. Nó tạo ra một ứng dụng cơ bản cho phép bạn tải xuống HTML từ một trang web nhất định.

Để thử nghiệm với ví dụ này, bạn cần chạy điều này trên một thiết bị thực tế có kết nối internet wifi.

Các bước Sự miêu tả
1 Bạn sẽ sử dụng Android studio IDE để tạo ứng dụng Android theo gói com.tutorialspoint.myapplication.
2 Sửa đổi tệp src / MainActivity.java để thêm mã Hoạt động.
4 Sửa đổi tệp XML bố cục res / layout / activity_main.xml thêm bất kỳ thành phần GUI nào nếu cần.
6 Sửa đổi AndroidManifest.xml để thêm các quyền cần thiết.
7 Chạy ứng dụng và chọn một thiết bị Android đang chạy và cài đặt ứng dụng trên đó và xác minh kết quả.

Đây là nội dung của 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;
   }

}

Đây là nội dung của 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>

Đây là nội dung của Strings.xml.

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

Đây là nội dung của 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>

Hãy thử chạy ứng dụng của bạn. Tôi giả sử bạn đã kết nối thiết bị Di động Android thực tế với máy tính của mình. Để chạy ứng dụng từ android studio, hãy mở một trong các tệp hoạt động của dự án của bạn và nhấp vào

biểu tượng Chạy từ thanh công cụ. Trước khi khởi động ứng dụng của bạn, Android studio sẽ hiển thị cửa sổ sau để chọn một tùy chọn mà bạn muốn chạy ứng dụng Android của mình.

Chọn thiết bị di động của bạn làm tùy chọn và sau đó kiểm tra thiết bị di động của bạn sẽ hiển thị màn hình sau -

Bây giờ chỉ cần nhấp vào nút, Nó sẽ kiểm tra kết nối internet cũng như nó sẽ tải xuống hình ảnh.

Out sẽ như sau và nó đã lấy logo từ internet.