大家好Bug报告供您参考。 链接
问题的详细信息 :
守则 - wifiManager.getConnectionInfo().getSSID()
上面的代码返回当前SSID,它与周围的额外报价返回当前SSID。
对于如。 该SSID internet
返回为"internet"
。
这仅看到的使用设备的Nexus 7果冻豆4.2。
当我们比较当前SSID与我们正在试图连接太SSID此错误导致我们的应用程序错误。
代码wifiManager.getScanResults();
但仍返回所有SSID的,无需额外引号。
这是不是一个错误,行为是按照正确的文档在http://developer.android.com/reference/android/net/wifi/WifiInfo.html#getSSID()
所谓错误显然是在前期4.2设备,因为他们没有用“”圈地返回。
艾登的方法看起来不错,我在由Android留下混乱的现状。 然而,作为theoritically正确只想要求
if (ssid.startsWith("\"") && ssid.endsWith("\"")){
ssid = ssid.substring(1, ssid.length()-1);
}
这正则表达式是相当整洁:
String ssid = wi.getSSID().replaceAll("^\"(.*)\"$", "$1");
只为笔记
编辑°1(根据在注释问题):
该OP描述的问题是,在某些设备上返回的SSID getSSID()
被封闭在""
,而不是在其他设备上。 例如,在某些设备的SSID是"MY_WIFI"
和别人是MY_WIFI
-或在Java代码中说: "\"MY_WIFI\""
和"MY_WIFI"
。
为了统一这两种结果,我建议取消"
在起点和终点-只有在那里,因为"
是SSID内的法律性质。 在上面的正则表达式
^
从开始指
$
指结束
\"
装置"
(转义)
.*
是指任何数量的字符
(...)
是指捕获组,可以由被称为$1
因此整个表达式表示:取代"<something>"
由<something>
其中$1
= <something>
。 如果没有"
在结束/开始,正则表达式不匹配,并没有被替换。
请参阅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 }