2012-11-26 17 views
24

Ciao a tutti i bug che segnalano le tue informazioni. Dettagli linkProblema di Jelly Bean - wifiManager.getConnectionInfo(). GetSSID() - extra ""

Problema:

Il Codice-wifiManager.getConnectionInfo().getSSID()

Il codice qui sopra per i rendimenti l'SSID attuale, viene restituita l'SSID corrente con citazioni in più intorno ad esso.

Ad es. il SSID internet viene restituito come "internet".

Questo è visto solo su Jelly Bean 4.2 tramite dispositivo Nexus 7.

Questo bug sta causando errori nella nostra app come si confronta lo SSID corrente con lo SSID che stiamo cercando di collegare troppo.

Il codice wifiManager.getScanResults(); tuttavia restituisce ancora tutti gli SSID senza virgolette.


+0

Yeap, affrontato questo problema pochi giorni fa. Non sono sicuro se è un problema o progettato con lo scopo. Spero che non lo "sistemeranno", dato che spezzerà molto codice! –

+0

stesso problema con l'aggiornamento 4.3 Android su Samsung Galaxy Note2. Non c'erano citazioni nella versione 4.1.2 sulla nota2. – faizal

+0

Accade anche con Android 4.4.2 –

risposta

30

questo non è un bug e comportamento è corretto come da documentazione in http://developer.android.com/reference/android/net/wifi/WifiInfo.html#getSSID()

Il cosiddetto bug apparentemente era nei dispositivi precedenti alla 4.2, perché non la restituivano con "".

Il metodo di Aiden mi sembra buono nell'attuale stato di confusione lasciato da Android. Tuttavia, essendo theoritically corretta sarebbe solo richiede

if (ssid.startsWith("\"") && ssid.endsWith("\"")){ 
      ssid = ssid.substring(1, ssid.length()-1); 
} 
6

Per il momento medio questo è il modo in cui sto andando in giro, anche se non è grandioso risolverà il problema.

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

Due varianti molto semplice:

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

e

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

fare attenzione con questi come è possibile per SSID valido per avere citazioni al loro interno cioè. "il mio" free-free "wifi". Anche la seconda varietà è ottima, ma è necessario il controllo indicato nella mia risposta per essere sicuro di non rovinare altro. –

+0

@AidenFry Non penso che la regex possa influenzare l'esempio che hai fornito, dal momento che controlla solo il char iniziale e il carattere finale (con^e $). La funzione restituirebbe solo String con virgolette o cifre esadecimali in base al documento, quindi elimina solo le virgolette arrotondate dalla funzione ma manterrà le virgolette della stringa originale. Il problema con la regex è che non dovrebbe avere ** spazio vuoto ** dopo/prima delle virgolette. per esempio. '("^\ "| \" $ ")' –

+0

È pulito, ma ci aiuterebbe a capire che cosa fa, se aggiungeste qualche spiegazione. Il PO non ha una domanda chiara. – msysmilu

8

Questa espressione regolare è abbastanza pulito:

String ssid = wi.getSSID().replaceAll("^\"(.*)\"$", "$1"); 

Solo per le note

Modifica ° 1 (come da domanda nel commento) :

Il problema che OP descrive è che su alcuni dispositivi il SSID restituito da getSSID() è enclos ed in "" mentre non è su altri dispositivi. Per esempio. su alcuni dispositivi il SSID è "MY_WIFI" e su altri è MY_WIFI - o parlato in codice Java: "\"MY_WIFI\"" e "MY_WIFI".

Per unificare entrambi i risultati, ho proposto di rimuovere " all'inizio e alla fine - solo lì, perché " è un carattere legale all'interno del SSID.Nell'espressione regolare sopra

^ mezzi dall'inizio
$ mezzi a fine
\" mezzi " (sfuggito)
.*, qualsiasi numero di caratteri
(...) significa un gruppo di cattura, che può essere definito da $1

Quindi l'espressione intera significa: sostituire "<something>" per <something> dove $1 = <something>. Se non ci sono " alla fine/inizio, l'espressione regolare non corrisponde e nulla viene sostituito.

Vedere Java Pattern class per ulteriori dettagli.

+0

È * pulito *, ma ci aiuterebbe a capire che cosa fa, se aggiungeste qualche spiegazione. Il PO non ha una domanda chiara. – msysmilu

0

Di fronte allo stesso problema! Usato questa tecnica che è retrocompatibile:

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