如何在安卓9.0(PIE)中获取WIFI SSID?



如何在Android 9.0(PIE(中获取WIFI SSID?我的代码在安卓版本 8.1.0 之前工作正常,但在安卓 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( 更改需要启用位置(由用户(,否则对 getConnectioInfo(( 的调用将失败,即使您的应用具有正确的权限也是如此。 这记录在 Android 9 更改中(摘录如下(:


对 Wi-Fi 位置和连接信息的访问受限

在 Android 9 中,应用执行 Wi-Fi 扫描的权限要求比以前的版本更严格。有关详细信息,请参阅 Wi-Fi 扫描限制。

类似的限制也适用于getConnectionInfo((方法,该方法返回描述当前Wi-Fi连接的WifiInfo对象。仅当调用应用具有以下权限时,才能使用此对象的方法检索 SSID 和 BSSID 值:

  • ACCESS_FINE_LOCATION或ACCESS_COARSE_LOCATION
  • ACCESS_WIFI_STATE

检索 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_LOCATIONACCESS_COARSE_LOCATION权限。 您可能还需要CHANGE_WIFI_STATEAndroid 9(无论如何,根据 https://developer.android.com/guide/topics/connectivity/wifi-scan,wifi扫描就是这种情况(

您可以使用位置权限访问在Android 8中连接到它的ssid wifi,但在android 9中,您必须打开位置。 在这里阅读更多内容: https://developer.android.com/about/versions/pie/android-9.0-changes-all

最新更新