Подтвердить что ты не робот

Желе Bean Проблема - wifiManager.getConnectionInfo(). GetSSID() - extra ""

Привет всем сообщениям об ошибках для вашей информации. ссылка

Сведения о проблеме:

Код - wifiManager.getConnectionInfo().getSSID()

Приведенный выше код возвращает текущий SSID, он возвращает текущий SSID с дополнительными цитатами вокруг него.

Например, SSID internet возвращается как "internet".

Это видно только на желе bean 4.2 с помощью устройства Nexus 7.

Эта ошибка вызывает ошибки в нашем приложении, поскольку мы сравниваем текущий SSID с SSID, который мы также пытаемся подключить.

Однако код wifiManager.getScanResults(); возвращает все SSID без дополнительных кавычек.


4b9b3361

Ответ 1

это не ошибка, и поведение корректно в соответствии с документацией на http://developer.android.com/reference/android/net/wifi/WifiInfo.html#getSSID()

Так называемая ошибка, по-видимому, была в устройствах до 4.2, потому что они не вернули ее с "" корпусом.

Метод Эйдена выглядит хорошо для меня в текущем состоянии замешательства, оставленного Android. Однако, будучи теоретически правильным, просто потребовалось бы

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

Ответ 2

Это регулярное выражение довольно аккуратно:

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

Только для заметок

Изменить ° 1 (в соответствии с вопросом в комментарии):

Проблема, описанная в OP, заключается в том, что на некоторых устройствах SSID, возвращаемый getSSID(), заключен в "", тогда как он не находится на других устройствах. Например. на некоторых устройствах SSID равен "MY_WIFI", а на других - MY_WIFI - или произнесен в Java-коде: "\"MY_WIFI\"" и "MY_WIFI".

Чтобы унифицировать оба результата, я предложил удалить " в начале и в конце - только там, потому что " является юридическим символом внутри SSID. В регулярном выражении выше

^ означает с начала
$ означает в конце
\" означает " (экранированный)
.* означает любое количество символов (...) означает группу захвата, которую можно отнести к $1

Итак, все выражение означает: замените "<something>" на <something>, где $1= <something>. Если в конце/запуске нет ", регулярное выражение не соответствует и ничего не заменяется.

Подробнее см. Java Класс шаблона.

Ответ 3

В то же время я так оборачиваюсь, хотя это не очень хорошо, это устранит проблему.

 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);

Ответ 5

Столкнулась с той же проблемой! Используется этот метод, который обратно совместим:

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