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

Cách kiểm tra kết nối internet trên Android

Giới thiệu

Bài viết demo kiểm tra trạng thái kết nối mạng (Wi-Fi, Mobile data, Không có mạng) trên Android bằng BroadcastReceiver lắng nghe CONNECTIVITY_CHANGE.

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

Bước 1: Tạo project Android Studio

File → New Project → điền thông tin.

Bước 2: Thêm permission vào AndroidManifest.xml

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

Bước 3: MainActivity - Đăng ký BroadcastReceiver

public class MainActivity extends AppCompatActivity {
    private BroadcastReceiver myReceiver = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        myReceiver = new MyReceiver();
        TextView click = findViewById(R.id.click);
        click.setOnClickListener(v -> broadcastIntent());
    }

    public void broadcastIntent() {
        registerReceiver(myReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
    }

    @Override
    protected void onPause() {
        super.onPause();
        unregisterReceiver(myReceiver); // Quan trọng: unregister tránh leak
    }
}

Bước 4: NetworkUtil - Kiểm tra loại kết nối

class NetworkUtil {
    public static String getConnectivityStatusString(Context context) {
        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
        
        if (activeNetwork != null) {
            if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) {
                return "Wi-Fi đang bật";
            } else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) {
                return "Dữ liệu di động đang bật";
            }
        }
        return "Không có kết nối internet";
    }
}

Bước 5: BroadcastReceiver - MyReceiver

public class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        String status = NetworkUtil.getConnectivityStatusString(context);
        if (status.isEmpty()) status = "Không có kết nối Internet";
        Toast.makeText(context, status, Toast.LENGTH_LONG).show();
    }
}

Bước 6: Đăng ký Receiver trong Manifest

<receiver android:name=".MyReceiver">
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
        <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
    </intent-filter>
</receiver>

Bước 7: Layout activity_main.xml

<TextView
    android:id="@+id/click"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Nhấn để kiểm tra mạng"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

Kết quả chạy thử

Nhấn TextView → Toast hiển thị trạng thái: "Wi-Fi đang bật", "Dữ liệu di động đang bật" hoặc "Không có kết nối internet".

Cách kiểm tra kết nối internet trên Android Cách kiểm tra kết nối internet trên Android Cách kiểm tra kết nối internet trên Android Cách kiểm tra kết nối internet trên Android

Lưu ý quan trọng (Android 7.0+ / API 24+)

  • CONNECTIVITY_ACTION broadcast **không còn gửi đến manifest-declared receiver**.
  • Phải đăng ký receiver **động (runtime)** như code trên (registerReceiver trong onCreate/onResume).
  • Hoặc dùng ConnectivityManager.NetworkCallback (API 21+) - cách hiện đại hơn, không cần permission.

Cách hiện đại: NetworkCallback (API 24+)

ConnectivityManager cm = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
NetworkRequest request = new NetworkRequest.Builder()
    .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
    .build();

cm.registerNetworkCallback(request, new ConnectivityManager.NetworkCallback() {
    @Override
    public void onAvailable(@NonNull Network network) {
        // Có mạng
    }
    @Override
    public void onLost(@NonNull Network network) {
        // Mất mạng
    }
});