您好所有错误报告都是您的信息。 link
问题详情:
守则 - wifiManager.getConnectionInfo().getSSID()
上面的代码返回当前的SSID,它返回当前的SSID并附带额外的引号。
例如。 SSID internet
将返回"internet"
。
仅在使用设备Nexus 7的Jelly bean 4.2上看到。
这个错误导致我们的应用程序出错,因为我们将当前的SSID与我们尝试连接的SSID进行比较。
然而,代码wifiManager.getScanResults();
仍会返回所有SSID而没有多余的引号。
答案 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 }