果冻豆问题 - wifiManager.getConnectionInfo()getSSID()

2019-08-03 05:13发布

大家好Bug报告供您参考。 链接

问题的详细信息

守则 - wifiManager.getConnectionInfo().getSSID()

上面的代码返回当前SSID,它与周围的额外报价返回当前SSID。

对于如。 该SSID internet返回为"internet"

这仅看到的使用设备的Nexus 7果冻豆4.2。

当我们比较当前SSID与我们正在试图连接太SSID此错误导致我们的应用程序错误。

代码wifiManager.getScanResults(); 但仍返回所有SSID的,无需额外引号。


Answer 1:

这是不是一个错误,行为是按照正确的文档在http://developer.android.com/reference/android/net/wifi/WifiInfo.html#getSSID()

所谓错误显然是在前期4.2设备,因为他们没有用“”圈地返回。

艾登的方法看起来不错,我在由Android留下混乱的现状。 然而,作为theoritically正确只想要求

if (ssid.startsWith("\"") && ssid.endsWith("\"")){
             ssid = ssid.substring(1, ssid.length()-1);
}


Answer 2:

这正则表达式是相当整洁:

String ssid = wi.getSSID().replaceAll("^\"(.*)\"$", "$1");

只为笔记

编辑°1(根据在注释问题):

该OP描述的问题是,在某些设备上返回的SSID getSSID()被封闭在"" ,而不是在其他设备上。 例如,在某些设备的SSID是"MY_WIFI"和别人是MY_WIFI -或在Java代码中说: "\"MY_WIFI\"""MY_WIFI"

为了统一这两种结果,我建议取消"在起点和终点-只有在那里,因为"是SSID内的法律性质。 在上面的正则表达式

^从开始指
$指结束
\"装置" (转义)
.*是指任何数量的字符
(...)是指捕获组,可以由被称为$1

因此整个表达式表示:取代"<something>"<something>其中$1 = <something> 。 如果没有"在结束/开始,正则表达式不匹配,并没有被替换。

请参阅Java Pattern类的更多细节。



Answer 3:

对于平均时间,这是我如何得到它周围,虽然它不是很大,将解决这个问题。

 public String removeQuotationsInCurrentSSIDForJellyBean(String ssid){
     int deviceVersion= Build.VERSION.SDK_INT;

     if (deviceVersion >= 17){
         if (ssid.startsWith("\"") && ssid.endsWith("\"")){
             ssid = ssid.substring(1, ssid.length()-1);
         }
     }

     return ssid;

 }


Answer 4:

两个很简单的变种:

string = string.replaceAll("^\" | \"$", "");

string = string.substring(1, string.length() - 1);


Answer 5:

面对同样的问题! 使用该技术,它是向后兼容的:

if (suppliedSSID.equals(connectionInfo.getSSID()) || ("\"" + suppliedSSID + "\"").equals(connectionInfo.getSSID()) { DO SOMETHING }



文章来源: Jelly Bean Issue - wifiManager.getConnectionInfo().getSSID() - extra “”