首页 文章

在Oreo(8.1.0)上没有获得正确的Wifi SSID . 它显示<unknown ssid>虽然它连接到带有SSID的wifi

提问于
浏览
1

我需要检查android上当前连接的wifi SSID . 我分别与诺基亚6和OnePlus 5一起检查了Oreo 8.1.0和Oreo 8.0 . 其他具有不同操作系统版本的手机正常使用此代码 . 我的代码有什么问题吗?

private WifiInfo wifiInfo;
private String ssid = "";
private WifiManager wifiManager;

private boolean getWifiStatus() {
    wifiManager= (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
    wifiInfo = wifiManager.getConnectionInfo();
    ssid = "";
    ssid = wifiInfo.getSSID();
    ConnectivityManager cm =
            (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    boolean isWiFi = false;
    if(activeNetwork != null){
        isWiFi = activeNetwork.getType() == ConnectivityManager.TYPE_WIFI;
    }

    Log.d(TAG, "getWifiStatus: " + ssid);
    if(ssid.contains("TripleMZim") && wifiManager.isWifiEnabled() && isWiFi ){
        return true;
    }
    else{
        return false;
    }
}

清单文件中的权限:

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

3 回答

  • 0

    Oreo 8.1设备需要启用粗略位置运行时权限以及位置服务才能检索连接的SSID,因为它可以推断用户位置 .

    更多信息是available here

    this有关

  • 7

    在Android Oreo中,您可以使用 ConnectivityManager 来了解您的wifi SSID .

    允许

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

    获取SSID的代码

    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo info = cm.getActiveNetworkInfo();
    if (info != null && info.isConnected()) {
        String ssid = info.getExtraInfo();
        Log.d(TAG, "WiFi SSID: " + ssid);
    }
    

    这是在Android Oreo 8.1.0中测试的 . 您将获得带有双引号的SSID .

  • 3

    如果您在尝试Yaswant Narayan和behelit答案后遇到问题,请确保在尝试获取SSID时启用了设备中的位置/ GPS . 即使您已获得Android Oreo及以上设备的相关权限,如果用户关闭了位置/ GPS,您也可以从这些设备获取 .

相关问题