1. ホーム
  2. アンドロイド

[解決済み】AndroidでWi-Fiが接続されているかどうかを確認する方法を教えてください。

2022-04-21 08:51:08

質問

Wi-Fiに接続していないユーザーには、ダウンロードをさせたくないのです。しかし、Wi-Fiが有効になっているかどうかしかわからないようですが、3G接続が可能な場合もあります。

android.net.wifi.WifiManager m = (WifiManager) getSystemService(WIFI_SERVICE);
android.net.wifi.SupplicantState s = m.getConnectionInfo().getSupplicantState();
NetworkInfo.DetailedState state = WifiInfo.getDetailedStateOf(s);
if (state != NetworkInfo.DetailedState.CONNECTED) {
    return false;
}

しかし、その状態は私が期待するようなものではありません。Wi-Fiが接続されているにもかかわらず、次のような状態になっています。 OBTAINING_IPADDR という状態です。

解決方法は?

ConnectivityManagerを使用して、Wi-Fiアダプタの状態を取得することができるはずです。そこから、次のことができます。 接続されているか、利用可能かどうかを確認する .

ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

if (mWifi.isConnected()) {
    // Do whatever
}

NOTE 私たち初心者のために書いておきますが、次のように記述する必要があります。

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

をあなたの

AndroidManifest.xml を実行する必要があります。

NOTE2 : public NetworkInfo getNetworkInfo (int networkType) は非推奨となりました。

このメソッドはAPIレベル23で非推奨となった。このメソッドは は、同じ種類の複数の接続されたネットワークをサポートしています。使用方法 getAllNetworks()とgetNetworkInfo(android.net.Network)で代用してください。

注3 : public static final int TYPE_WIFI は非推奨となりました。

この定数は API レベル 28 で非推奨となりました。 アプリケーションは、代わりに NetworkCapabilities.hasTransport(int) または requestNetwork(NetworkRequest, NetworkCallback) を使用して、サポートされるトランスポートの適切なネットワークを要求する必要があります。