Android 9.0(PIE)でWIFI SSIDを取得する方法は?コードはAndroidバージョン8.1.0までは正常に機能していますが、Android 9.0では機能していません
ConnectivityManager connManager = (ConnectivityManager) activity.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (networkInfo.isConnected()) {
WifiManager wifiManager = (WifiManager) activity.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
wifiInfo.getSSID();
String name = networkInfo.getExtraInfo();
String ssid = "\"" + wifiInfo.getSSID() + "\"";
}
しかし、このコードはAndroid 9.0では動作しません
Androidバージョン9(Pie)を変更するには、(ユーザーが)Locationを有効にする必要があります。そうしないと、アプリに正しい権限がある場合でもgetConnectioInfo()の呼び出しが失敗します。これは Android 9の変更 (以下の抜粋)で文書化されています:
Wi-Fiの場所と接続情報への制限されたアクセス
Android 9では、アプリがWi-Fiスキャンを実行するための許可要件は、以前のバージョンよりも厳密です。詳細については、Wi-Fiスキャンの制限を参照してください。
同様の制限は、現在のWi-Fi接続を記述するWifiInfoオブジェクトを返すgetConnectionInfo()メソッドにも適用されます。呼び出し元アプリに次のアクセス許可がある場合にのみ、このオブジェクトのメソッドを使用してSSIDおよびBSSID値を取得できます。
SSIDまたはBSSIDを取得するには、デバイスでロケーションサービスを有効にする必要もあります([設定]> [ロケーション]の下)。
私の場合、WIFI SSIDを読み取ろうとする前に、以下の関数を呼び出して(Android 9+)で実行している場合のみ)、位置情報が有効かどうかを検出します。
public static boolean isLocnEnabled(Context context) {
List locnProviders = null;
try {
LocationManager lm =(LocationManager) context.getApplicationContext().getSystemService(Activity.LOCATION_SERVICE);
locnProviders = lm.getProviders(true);
return (locnProviders.size() != 0);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (BuildConfig.DEBUG) {
if ((locnProviders == null) || (locnProviders.isEmpty()))
Log.d(TAG, "Location services disabled");
else
Log.d(TAG, "locnProviders: " + locnProviders.toString());
}
}
return(false);
}
位置情報が有効になっていない場合、必要であることを示すダイアログがポップアップし、ユーザーが位置設定ページにジャンプできるようになります(以下のコードを参照)。
context.startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
これは権限に関連しています。..APIレベル27では、ACCESS_FINE_LOCATION
またはACCESS_COARSE_LOCATION
許可。また、CHANGE_WIFI_STATE
for Android 9(Wi-Fiスキャンの場合はとにかく https://developer.Android.com/guide/topics/connectivity/wifi-scan )
接続されているssid wifiにアクセスするには、Android 8で場所の許可が必要ですが、Android 9では場所をオンにする必要があります。詳細はこちら: https://developer.Android.com/about/versions/pie/Android-9.0-changes-all