手機連上 WiFi 不代表能訪問互聯網(需認證/斷網),NetworkInfo 只反映鏈路層連接。
public boolean isInternetReachable() {
try {
Process p = Runtime.getRuntime().exec("ping -c 1 -W 1 www.baidu.com");
return p.waitFor() == 0;
} catch (Exception e) {
return false;
}
}
// 異步版本 (RxJava/Kotlin 協程)
Completable.fromAction(() -> {
boolean ok = isInternetReachable();
// 回調 UI
}).subscribeOn(Schedulers.io()).subscribe();
-W 1 1 秒),失敗快返回。ConnectivityManager.NetworkCallback 監聽真實網絡狀態變化,結合 Ping 確認。**Ping 是最直接、跨平台的「能否上網」判斷手段。**