【问题标题】:Jelly Bean Issue - wifiManager.getConnectionInfo().getSSID() - extra ""果冻豆问题 - wifiManager.getConnectionInfo().getSSID() - 额外的“”
【发布时间】:2012-11-26 10:36:42
【问题描述】:

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

问题详情

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

上面的代码返回当前的SSID,它返回的是当前的SSID加上额外的引号。

例如。 SSID internet 返回为"internet"

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

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

代码 wifiManager.getScanResults(); 但仍返回所有 SSID,不带额外引号。


【问题讨论】:

  • 是的,几天前遇到了这个问题。不确定它是有问题还是有目的的设计。希望他们不会“修复”它,因为它会破坏很多代码!
  • 三星 Galaxy Note2 上的 android 4.3 更新存在同样的问题。 note2上4.1.2版本没有引号。
  • android 4.4.2 也会发生这种情况

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


【解决方案1】:

这不是错误,根据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);
}

【讨论】:

    【解决方案2】:

    这个正则表达式很简洁:

    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

    【讨论】:

    • 整洁的,但是,如果您添加一些解释,它将帮助我们理解它的作用。 OP也没有明确的问题。
    【解决方案3】:

    目前,这就是我解决问题的方式,虽然它不是很好,但它会解决问题。

     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;
    
     }
    

    【讨论】:

      【解决方案4】:

      两个非常简单的变体:

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

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

      【讨论】:

      • 小心这些,因为有效的 SSID 可能在其中包含引号,即。 “我的“freeking”wifi”。第二个变量也很棒,但是您需要在我的回答中提到的检查以确保您不会弄乱其他任何东西。
      • @AidenFry 我认为正则表达式不会影响您提供的示例,因为它只检查起始字符和结束字符(带有 ^ 和 $)。该函数只会根据文档返回带有引号或十六进制数字的字符串,因此它只会消除函数四舍五入的引号,但会保留原始字符串的引号。正则表达式的问题是它不应该在引号之后/之前有 空格。例如("^\"|\"$")
      • 它很简洁,但是,如果您添加一些解释,它将帮助我们理解它的作用。 OP也没有明确的问题。
      【解决方案5】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-02-12
        • 2012-11-10
        • 2013-05-21
        • 1970-01-01
        • 1970-01-01
        • 2012-08-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多