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 23NetworkInfodeprecated 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.
