25

您好所有错误报告,供您参考。关联

问题详情

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

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

例如。SSIDinternet返回为"internet".

这仅在使用设备 Nexus 7 的 Jelly bean 4.2 上可见。

当我们将当前 SSID 与我们尝试连接的 SSID 进行比较时,此错误会导致我们的应用程序出错。

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


4

5 回答 5

32

这不是错误,根据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);
}
于 2013-02-21T00:53:37.950 回答
9

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

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

只为笔记

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

OP 描述的问题是,在某些设备上,返回的 SSIDgetSSID()包含在其中,""而在其他设备上则没有。例如,在某些设备上 SSID 是"MY_WIFI",而在其他设备上它是MY_WIFI- 或用 Java 代码表示:"\"MY_WIFI\"""MY_WIFI".

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

^表示从开始
$表示结束
\"表示"(转义)
.*表示任意数量的字符
(...)表示捕获组,可以通过以下方式引用$1

所以整个表达式的意思是:替换"<something>"<something>where $1= <something>。如果没有"结束/开始,则正则表达式不匹配并且没有任何内容被替换。

有关更多详细信息,请参阅 Java模式类

于 2013-11-21T12:56:42.757 回答
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;

 }
于 2012-11-26T10:36:42.523 回答
4

两个非常简单的变体:

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

string = string.substring(1, string.length() - 1);
于 2012-11-27T09:09:06.160 回答
0

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

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

于 2014-01-13T01:39:52.893 回答