2012-11-26 68 views
24

您好所有的錯誤報告爲您的信息。 linkJelly Bean問題 - wifiManager.getConnectionInfo()。getSSID() - extra「」

問題的詳細信息

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

上面的代碼返回當前SSID,它返回當前的SSID與周圍多餘的報價。

例如,返回的號碼爲"internet"

這是隻看到在果凍豆4.2使用設備的Nexus 7

此錯誤導致我們的應用程序錯誤,因爲我們比較當前的SSID與我們正在試圖連接過的SSID。

然而代碼wifiManager.getScanResults();仍然返回所有SSID的沒有額外的引號。


+0

葉氏,前幾天遇到這個問題。不確定這是問題還是有目的的設計。希望他們不會「修復」它,因爲它會破壞很多代碼! –

+0

與三星galaxy note2上的android 4.3更新相同的問題。 note2的4.1.2版本中沒有引號。 – faizal

+0

它也發生在Android 4.4.2 –

回答

30

這是不是一個錯誤和行爲是按文件無誤http://developer.android.com/reference/android/net/wifi/WifiInfo.html#getSSID()

所謂的bug顯然是在4.2之前的設備,因爲他們沒有返回「」的外殼。

在Android留下的混亂狀態下,艾登的方法看起來不錯。然而,作爲theoritically正確的也只是需要

if (ssid.startsWith("\"") && ssid.endsWith("\"")){ 
      ssid = ssid.substring(1, ssid.length()-1); 
} 
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; 

} 
4

兩個很簡單的變體:

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

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

要小心這些,因爲它是有可能的有效SSID的引號內,即。 「我的」freeking「wifi」。另外第二個變量很好,但你需要在我的答案中提到的檢查,以確保你不會搞砸其他任何東西。 –

+0

@AidenFry我不認爲正則表達式會影響你提供的例子,因爲它只檢查起始字符和結束字符(用^和$)。該函數只會根據文檔返回帶有引號或十六進制數字的字符串,因此它只消除函數四捨五入的引號,但會保留原始字符串的引號。正則表達式的問題是在引號之後/之前不應該有**空格**。例如'(「^ \」| \「$」)' –

+0

它很整潔,但是,如果您想添加一些解釋,它會幫助我們理解它的功能。 OP也沒有明確的問題。 – msysmilu

8

這個正則表達式是相當整潔:

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

+0

它*是*整齊,但它會幫助我們理解它的作用,如果你想添加一些解釋。 OP也沒有明確的問題。 – msysmilu

0

面對同樣的問題!使用該技術,它是向後兼容的:

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