果冻豆问题 - wifiManager.getConnectionInfo().getSSID() - 额外的""

Aid*_*Fry 25 android ssid android-wifi android-4.2-jelly-bean

嗨所有错误报告您的信息.链接

问题详情:

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

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

例如.SSID internet返回为"internet".

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

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

wifiManager.getScanResults();但是,代码仍会返回所有SSID而没有额外的引号.


kis*_*u27 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);
}
Run Code Online (Sandbox Code Playgroud)


Tri*_*mon 9

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

String ssid = wi.getSSID().replaceAll("^\"(.*)\"$", "$1");
Run Code Online (Sandbox Code Playgroud)

只是为了笔记

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

OP描述的问题是,在某些设备上,返回的SSID getSSID()被包含在内,""而不是在其他设备上.例如,在某些设备上,SSID "MY_WIFI"在其他设备上,MY_WIFI或者在其他设备上,或者用Java代码表示:"\"MY_WIFI\"""MY_WIFI".

为了统一这两个结果,我建议删除"开头和结尾 - 只有那里,因为"是SSID中的合法字符.在上面的正则表达式中

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

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

有关更多详细信息,请参阅Java Pattern类.


Aid*_*Fry 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;

 }
Run Code Online (Sandbox Code Playgroud)