android android-wifi android-4.2-jelly-bean ssid

android - Problema de Jelly Bean-wifiManager.getConnectionInfo(). GetSSID()-extra “”



android-wifi android-4.2-jelly-bean (5)

Hola todos los informes de errores para su información. link

Detalles del problema :

El Código - wifiManager.getConnectionInfo().getSSID()

El código anterior para devolver el SSID actual, está devolviendo el SSID actual con citas adicionales a su alrededor.

Por ejemplo. el SSID internet se devuelve como "internet" .

Esto solo se ve en Jelly bean 4.2 utilizando el dispositivo Nexus 7.

Este error está causando errores en nuestra aplicación cuando comparamos el SSID actual con el SSID que también intentamos conectar.

El código wifiManager.getScanResults(); Sin embargo, todavía devuelve todos los SSID sin comillas adicionales.


Dos variantes muy simples:

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

y

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


Esta expresión regular es bastante clara:

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

Solo por las notas

Editar ° 1 (según pregunta en el comentario):

El problema que describe OP es que en algunos dispositivos el SSID devuelto por getSSID() está incluido en "" mientras que no está en otros dispositivos. Por ejemplo, en algunos dispositivos el SSID es "MY_WIFI" y en otros es MY_WIFI , o hablado en el código Java: "/"MY_WIFI/"" y "MY_WIFI" .

Para unificar ambos resultados, propuse eliminar " al inicio y al final, solo allí, porque " es un carácter legal dentro del SSID. En la expresión regular de arriba.

^ significa desde el principio
$ significa al final
/" significa " (escapado)
.* significa cualquier número de caracteres
(...) significa un grupo de captura, que puede ser referido por $1

Entonces, toda la expresión significa: reemplaza "<something>" por <something> donde $1 = <something> . Si no hay " al final / inicio, la expresión regular no coincide y no se reemplaza nada.

Ver la clase de patrón de Java para más detalles.


Por el momento, así es como lo estoy superando, aunque no es bueno que solucione el 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; }


Se enfrentó al mismo problema! Usé esta técnica que es compatible con versiones anteriores:

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


esto no es un error y el comportamiento es correcto según la documentación en http://developer.android.com/reference/android/net/wifi/WifiInfo.html#getSSID()

El llamado error aparentemente estaba en dispositivos pre 4.2, porque no lo devolvieron con "" enclosure.

El método de Aiden me parece bien en el estado actual de confusión que dejó Android. Sin embargo, ser teóricamente correcto solo requeriría

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