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".

Lưu ý quan trọng (Android 7.0+ / API 24+)
CONNECTIVITY_ACTIONbroadcast **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
}
});