首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android 判斷 WiFi 能否上網:Ping 監測替代連接狀態

     編輯:程式設計綜合問答

問題

手機連上 WiFi 不代表能訪問互聯網(需認證/斷網),NetworkInfo 只反映鏈路層連接。

方案:異步 Ping 可達性檢測


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();

優化建議

  • 目標換為**自己的業務服務器 IP**,避免依賴百度/谷歌(可能被封/解析慢)。
  • 超時設置短 (-W 1 1 秒),失敗快返回。
  • 緩存結果 (如 30 秒內不重複檢測),避免頻繁 Ping 消耗電量/流量。
  • Android 7.0+ 可用 ConnectivityManager.NetworkCallback 監聽真實網絡狀態變化,結合 Ping 確認。

**Ping 是最直接、跨平台的「能否上網」判斷手段。**

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved