适配解决Android 8.0和9.0无法获取SSID (unknow ssid)

最近遇到一个奇怪的bug,部分手机上获取wifi的名字,通过WifiManager.getConnectionInfo().getSSID()为"unknown ssid",调试查看SSID为"",这导致接下来的一系列逻辑都出现了问题。目前发现RROS(Remix)的ROM会出现这个问题。特此记录解决方法。

首先实例化WifiManager和ConnectivityManager
mWifiManager = (WifiManager) this.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
mConnectivityManager = (ConnectivityManager) this.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);

一般情况下都是直接得到WifiInfo
 WifiInfo mWifiInfo = mWifiManager.getConnectionInfo();
但是使用mWifiInfo.getSSID()得到的值为""
作为替代,可以通过如下代码获取当前连接的WIFI的名称
NetworkInfo wifiInfo = mConnectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
String wifiName = wifiInfo.getExtraInfo();

通过此种方法,获取到的wifi名称前后带有引号,通过代码删除前后引号即可
if (wifiName.startsWith("\"")) {
    wifiName = wifiName.substring(1, wifiName.length());
}
if (wifiName.endsWith("\"")) {
    wifiName = wifiName.substring(0, wifiName.length() - 1);
}

9.0的机型,必须请求GPS权限并打开GPS才可以正确获取到WIFI名称
 

二、申请权限 定位权限就好了

       

   

9.0在8.0基础上新增权限

   


9.0华为手机无法获取解决方案

     WifiManager my_wifiManager = ((WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE));            

    assert my_wifiManager != null;          

    wifiInfo = my_wifiManager.getConnectionInfo();            

   ssid = wifiInfo.getSSID();

   int networkId = wifiInfo.getNetworkId();                  

   List configuredNetworks = my_wifiManager.getConfiguredNetworks();                  

   for (WifiConfiguration wifiConfiguration:configuredNetworks){                        

       if (wifiConfiguration.networkId==networkId){                          

       ssid=wifiConfiguration.SSID;                            

       break;                      

      }                    

  }
 

 

 

 

 

 

 

 

你可能感兴趣的:(开发知识点小汇编)