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

时间:2012-11-26 10:36:43

标签: android android-wifi android-4.2-jelly-bean ssid

您好所有错误报告都是您的信息。 link

问题详情

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

上面的代码返回当前的SSID,它返回当前的SSID并附带额外的引号。

例如。 SSID internet将返回"internet"

仅在使用设备Nexus 7的Jelly bean 4.2上看到。

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

然而,代码wifiManager.getScanResults();仍会返回所有SSID而没有多余的引号。


5 个答案:

答案 0 :(得分:31)

根据http://developer.android.com/reference/android/net/wifi/WifiInfo.html#getSSID()

的文档,这不是错误,行为是正确的

所谓的bug显然出现在4.2之前的设备上,因为它们并没有带回来。

Aiden的方法对我来说在Android留下的混乱状态下看起来不错。但是,理论上正确只需要

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

答案 1 :(得分:9)

这个正则表达式非常简洁:

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

仅供注意

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

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

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

^表示从开始到 $表示结尾 \"表示"(转义)
.*表示任意数量的字符
(...)表示可以由$1

引用的捕获组

所以整个表达式意味着:将"<something>"替换为<something> $1 = <something>。 如果在结束/开始时没有",则正则表达式不匹配,并且不会替换任何内容。

有关详细信息,请参阅Java Pattern class

答案 2 :(得分:6)

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

 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;

 }

答案 3 :(得分:4)

两个非常简单的变体:

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

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

答案 4 :(得分:0)

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

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