0

ここでネットワーク接続に関するすべての回答を見てきましたが、それらは非常に優れています。唯一の問題は、次のユース ケースです。

電話が Wi-Fi ネットワークに接続されているが、ルーターがインターネットへの接続を失った場合。だから私は、SOの周りに与えられたコードにこの追加を書くことを考えました:

/** Google public DNS service IP address **/
public static final String GOOGLE = "http://8.8.8.8"; 

public static boolean isConnected(Context context) {
    ConnectivityManager cm = (ConnectivityManager) context
        .getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo info = cm.getActiveNetworkInfo();
    if (info == null) {
        return false;
    }
    if (info.isConnected()) {
        try {
            InetAddress addr = InetAddress.getByName(GOOGLE);
            return addr.isReachable(10000);
        } catch (UnknownHostException e) {
            Log.wtf("Utils", e);
        } catch (IOException e) {
            Log.wtf("Utils", e);
        }
        return false;
    } else
        return false;
    }
}

これに関する唯一の問題は、メイン スレッドで実行されることです。より正確に言えば、メイン スレッドで実行するとクラッシュします。

別のスレッドで実行すると、サーバーから有効な回答を得る前に返されます。

(ネットワーク接続に比べて)インターネット接続をテストする方法について何か考えはありますか?

4

1 に答える 1