Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Cách kiểm tra kết nối Internet trong Android

Giới thiệu

Hướng dẫn này trình bày cách kiểm tra thiết bị Android có kết nối Internet (WiFi hoặc Mobile Data) hay không sử dụng ConnectivityManager.

Các bước thực hiện

Bước 1: Tạo dự án mới

Mở Android Studio, chọn File → New Project và điền thông tin cần thiết.

Bước 2: Thiết kế giao diện (res/layout/activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:app="https://schemas.android.com/apk/res-auto"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Trạng thái kết nối: "
        android:textSize="20sp"
        android:textStyle="bold"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

Bước 3: Viết logic xử lý (src/MainActivity.java)

import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        if (haveNetwork()) {
            Toast.makeText(this, "Kết nối mạng CÓ SẴN", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(this, "KHÔNG có kết nối mạng", Toast.LENGTH_SHORT).show();
        }
    }
    
    private boolean haveNetwork() {
        boolean haveWifi = false;
        boolean haveMobileData = false;
        
        ConnectivityManager cm = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
        NetworkInfo[] networkInfos = cm.getAllNetworkInfo();
        
        for (NetworkInfo info : networkInfos) {
            if (info.getTypeName().equalsIgnoreCase("WIFI")) {
                if (info.isConnected()) haveWifi = true;
            }
            if (info.getTypeName().equalsIgnoreCase("MOBILE")) {
                if (info.isConnected()) haveMobileData = true;
            }
        }
        
        return haveWifi || haveMobileData;
    }
}

Bước 4: Cấu hình Manifest (androidManifest.xml) - Cần quyền

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="app.com.sample">
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

⚠️ Lưu ý: API deprecated và cách hiện đại

Vấn đề với code cũ

  • getAllNetworkInfo() deprecated từ API 23
  • NetworkInfo deprecated từ API 29
  • Không kiểm tra được Internet thực sự (chỉ kiểm tra kết nối mạng)

Cách hiện đại (API 21+): NetworkCapabilities

private boolean hasInternetConnection() {
    ConnectivityManager cm = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
    if (cm == null) return false;
    
    Network activeNetwork = cm.getActiveNetwork();
    if (activeNetwork == null) return false;
    
    NetworkCapabilities capabilities = cm.getNetworkCapabilities(activeNetwork);
    return capabilities != null && capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
}

Cách kiểm tra Internet thực sự (ping)

// Chạy trên background thread
private boolean isInternetReachable() {
    try {
        Process p = Runtime.getRuntime().exec("ping -c 1 8.8.8.8");
        return p.waitFor() == 0;
    } catch (Exception e) {
        return false;
    }
}

Chạy ứng dụng

Kết nối thiết bị Android, nhấn Run trong Android Studio. Toast sẽ hiển thị trạng thái kết nối mạng.

Cách kiểm tra kết nối Internet trong Android