Jelly Bean Issue – wifiManager.getConnectionInfo()。getSSID() – extra“”

你好所有的错误报告你的信息。 链接

问题详情

代码wifiManager.getConnectionInfo().getSSID()

上面的代码返回当前的SSID,它返回当前的SSID和附加引号。

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

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

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

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


Solutions Collecting From Web of "Jelly Bean Issue – wifiManager.getConnectionInfo()。getSSID() – extra“”"

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

所谓的bug显然是在4.2之前的设备,因为他们没有把它放回到机箱。

在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"

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

^从开始的手段
$表示结束
\"意思是" (逃避)
.*表示任意数量的字符
(...)表示一个捕获组,可以被$1引用

所以整个expression式意味着:用"<something>"replace"<something>" ,其中$1 = <something> 。 如果没有"在结束/开始,正则expression式不匹配,没有被replace。

有关更多详细信息,请参阅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 }