2012-11-26 4 views
24

안녕하세요. link젤리 빈 문제 - wifiManager.getConnectionInfo(). getSSID() - 추가 ""

문제 자세한 사항 :

강령-wifiManager.getConnectionInfo().getSSID()

현재 SSID, 그것의 주위에 여분의 인용과 현재의 SSID를 반환 반환에 위의 코드.

예 : SSID internet"internet"으로 반환됩니다.

이것은 단지 우리가 너무 연결하려는 SSID와 현재의 SSID를 비교로이 버그는 우리의 응용 프로그램에서 오류를 일으키는 장치 넥서스 7

를 사용하여 젤리 빈 4.2에서 볼 수 있습니다.

그러나 코드 wifiManager.getScanResults();은 여전히 ​​모든 SSID를 따옴표없이 반환합니다.


+0

엡을, 며칠 전이 문제에 직면했다. 문제가 있거나 목적에 맞게 설계되었는지 확실하지 않습니다. 그것이 많은 코드를 깨기 때문에 그들은 그것을 "고칠"수 없기를 희망한다! –

+0

삼성 갤럭시 note2에서 안드로이드 4.3 업데이트와 같은 문제. note2의 4.1.2 버전에는 따옴표가 없습니다. – faizal

+0

또한 유효한 SSID가 따옴표를 포함 할 수 있으므로 안드로이드 4.4.2 –

답변

30

이 버그와 행동이 http://developer.android.com/reference/android/net/wifi/WifiInfo.html#getSSID()

소위 버그에서 문서에 따라 정확하지 않습니다 분명히 4.2 장치 이전이었습니다. 왜냐하면 그들은 인클로저와 함께 반환하지 않았기 때문입니다.

안드로이드가 남긴 현재의 혼란 상태에서 에이든의 방법이 나에게 잘 어울립니다. 그러나 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

과 함께 발생합니다. "내"자유로운 "와이파이". 또한 두 번째 변수는 훌륭하지만 내 대답에 언급 된 수표를 사용하여 다른 것을 엉망이 아닌지 확인해야합니다. –

+0

@AidenFry 정규식이 시작 문자와 끝 문자 (^ 및 $) 만 검사하기 때문에 제공된 정규식에 영향을 미치지 않는다고 생각합니다. 이 함수는 문서에 따라 문자열을 따옴표 나 16 진수로만 반환하므로 함수에서 반올림 한 따옴표 만 제거하지만 원래 문자열의 따옴표는 그대로 유지합니다. 정규식의 문제는 따옴표 앞뒤에 빈 공간 **이 없어야한다는 것입니다. 예 : –

+0

깔끔하지만, 설명을 추가하면 그것이 무엇을하는지 이해하는 데 도움이 될 것입니다. ("^ \"| \ "$") 영업 이익에도 명확한 질문이 없습니다. – msysmilu

8

을 필요로 :

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

편집 ° 1 (주석의 질문에 따라) :

OP에서 설명한 문제는 일부 장치에서 getSSID()에 의해 반환 된 SSID가 enclos 다른 기기에는없는 반면 ""에 있습니다. 예 : 일부 장치에서는 SSID가 "MY_WIFI"이고 다른 경우에는 MY_WIFI이거나 Java 코드로 "\"MY_WIFI\"""MY_WIFI"입니다.

두 결과를 통합하기 위해 "은 SSID 내부의 유효한 문자이므로 시작 부분과 끝 부분에서 "을 제거하기로 제안했습니다.

^ 상기 일반 식으로 시작
$에서 수단
\"
.*$1

로 지칭 될 수
(...)가 포착기를 의미 문자의 개수를 의미 "은 (이스케이프) 수단 끝에 수단

전체 표현의 의미는 다음과 같습니다. "<something>"<something>으로 바꾸십시오. $1 = <something>. 끝/시작 부분에 "이 없으면 정규 표현식이 일치하지 않고 바뀌지 않습니다.

자세한 내용은 Java Pattern class을 참조하십시오.

+0

* * 설명이 깔끔하지만 일부 설명을 추가하면 이해할 수 있습니다. 영업 이익에도 명확한 질문이 없습니다. – msysmilu

0

같은 문제가 발생했습니다. 이전 버전과 호환이 기술을 사용 :

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