最近遇到一个奇怪的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
for (WifiConfiguration wifiConfiguration:configuredNetworks){
if (wifiConfiguration.networkId==networkId){
ssid=wifiConfiguration.SSID;
break;
}
}