2012-11-26 9 views
24

Witam wszystkie zgłoszenia błędów dla twoich informacji. linkProblem Jelly Bean - wifiManager.getConnectionInfo(). GetSSID() - dodatkowy ""

Problem Szczegóły:

Kodeks - wifiManager.getConnectionInfo().getSSID()

Powyższy kod do Zwraca bieżący SSID, to wraca bieżący identyfikator SSID z dodatkowych cytatów wokół niego.

Na przykład. identyfikator SSID internet jest zwracany jako "internet".

Jest to widoczne tylko na Jelly Bean 4.2 za pomocą Nexusa 7.

Ten błąd powoduje błędy w naszej aplikacji, jak porównamy obecną SSID z SSID, że staramy się połączyć zbyt.

Mimo to kod wifiManager.getScanResults(); nadal zwraca wszystkie identyfikatory SSID bez dodatkowych cudzysłowów.


+0

yeap, w obliczu tego problemu kilka dni temu. Nie wiem, czy jest to problem, czy zaprojektowane z celem. Mam nadzieję, że nie "naprawią" tego, ponieważ złamie to dużo kodu! –

+0

sam problem z aktualizacją Androida 4.3 na Samsung Galaxy Note2. W notatce 2 nie było żadnych notowań w wersji 4.1.2. – faizal

+0

To samo dzieje się z Androidem 4.4.2 –

Odpowiedz

30

to nie jest błąd i zachowanie jest poprawne zgodnie z dokumentacją w http://developer.android.com/reference/android/net/wifi/WifiInfo.html#getSSID()

Tzw bug podobno był na urządzeniach pre 4.2, ponieważ nie zwrócił ich z "" obudową.

Metoda Aidena wygląda mi dobrze w obecnym stanie zamieszania pozostawionym przez Androida. Jednakże, będąc theoritically prawidłowa będzie tylko wymagać

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

Na tym czasie ten sposób otrzymuję wokół niego, choć jej nie wielki będzie rozwiązać problem.

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

Dwa bardzo proste warianty:

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

i

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

należy uważać z tymi, ponieważ możliwe jest, aby prawidłowe identyfikatory SSID zawierały w nich cytaty, np. "moje" freeking "wifi". Również drugi wariant jest świetny, ale potrzebujesz sprawdzenia wspomnianego w mojej odpowiedzi, aby upewnić się, że nie zepsujesz niczego innego. –

+0

@AidenFry Nie sądzę, aby regex wpłynęło na przykład, który podałeś, ponieważ sprawdza tylko początkowy znak i końcowy znak (z^i $). Funkcja zwróciłaby String tylko z cudzysłowami lub cyframi szesnastkowymi zgodnie z dokumentem, więc eliminuje tylko cudzysłowy zaokrąglone przez funkcję, ale zachowuje cudzysłowy oryginalnego ciągu. Problem z wyrażeniem regularnym nie powinien mieć ** pustej przestrzeni ** po/przed cudzysłowami. na przykład '("^\ "| \" $ ")' –

+0

Jest zgrabny, ale pomógłby nam zrozumieć, co robi, gdyby dodać jakieś wyjaśnienia. OP nie ma również jasnego pytania. – msysmilu

8

To wyrażenie regularne jest dość schludny:

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

tylko dla notatek

Edit ° 1 (jak na pytanie w komentarzu) :

Kwestia, którą OP opisuje to, że na niektórych urządzeniach identyfikator SSID zwrócony przez getSSID() jest załącznikiem ed w "", ale nie jest na innych urządzeniach. Na przykład. na niektórych urządzeniach identyfikator SSID to "MY_WIFI", a na innych jest to MY_WIFI - lub wypowiadany w kodzie Java: "\"MY_WIFI\"" i "MY_WIFI".

W celu ujednolicenia zarówno wyniki Zaproponowałem, aby usunąć " na początku i na końcu - tylko tam, bo " jest charakter prawny wewnątrz SSID.W wyrażeniu regularnym powyżej

^ znaczy od początku
$ oznacza na koniec
\" oznacza " (uciekł)
.* oznacza dowolną liczbę znaków
(...) oznacza grupę przechwytywania, które mogą być przedłożone przez $1

Całe wyrażenie oznacza: zastąp "<something>" przez <something> gdzie $1 = <something>. Jeśli nie ma " na końcu/początku, wyrażenie regularne nie pasuje i nic nie jest zastępowane.

Aby uzyskać więcej informacji, zobacz Java Pattern class.

+0

To * jest * zadbane, ale pomogłoby nam zrozumieć, co robi, gdyby dodać jakieś wyjaśnienia. OP nie ma również jasnego pytania. – msysmilu

0

Wobec tego samego problemu! Używane tę technikę, która jest wstecznie kompatybilne:

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

Powiązane problemy