果冻豆问题 – wifiManager.getConnectionInfo()。getSSID() – 额外的“”

嗨所有错误报告您的信息。 链接

问题详情

代码wifiManager.getConnectionInfo().getSSID()

上面的代码返回当前的SSID,它返回当前的SSID,并在其周围加上额外的引号。

例如。 SSID internet将作为"internet"返回。

这只能在使用设备Nexus 7的Jelly bean 4.2上看到。

这个错误导致我们的应用程序出错,因为我们将当前的SSID与我们尝试连接的SSID进行比较。

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


Solutions Collecting From Web of "果冻豆问题 – wifiManager.getConnectionInfo()。getSSID() – 额外的“”"

根据http://developer.android.com/reference/android/net/wifi/WifiInfo.html#getSSID()上的文档,这不是错误和行为是正确的

所谓的bug显然是在4.2之前的设备中,因为它们没有带有“”shell。

在Android留下的混乱状态下,Aiden的方法对我来说很好。 然而,理论上正确的只是需要

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

这个正则expression式非常简洁:

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

只是为了笔记

编辑°1 (根据评论中的问题):

OP描述的问题是,在某些设备上, getSSID()返回的SSID包含在""而不是在其他设备上。 例如,在某些设备上,SSID是"MY_WIFI"而在其他设备上,它是MY_WIFI – 或者在Java代码中说: "\"MY_WIFI\"""MY_WIFI"

为了统一这两个结果,我建议删除"在开始和结束时 – 仅在那里,因为"是SSID中的合法字符。 在上面的正则expression式中

^意味着从一开始
$表示结束
\"意思是" (逃脱)
.*表示任意数量的字符
(...)表示捕获组,可以由$1引用

所以整个expression式意味着:用""替换"" ,其中$1 = 。 如果没有"在结束/开始时,正则expression式不匹配,则不替换任何内容。

有关更多详细信息,请参阅Java Pattern类 。

平均而言,这就是我如何解决它,虽然它不是很好,它将解决问题。

  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; } 

两个非常简单的变种:

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

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

面临同样的问题! 使用这种向后兼容的技术:

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