Желе Bean Проблема - wifiManager.getConnectionInfo(). GetSSID() - extra ""
Привет всем сообщениям об ошибках для вашей информации. ссылка
Сведения о проблеме:
Код - wifiManager.getConnectionInfo().getSSID()
Приведенный выше код возвращает текущий SSID, он возвращает текущий SSID с дополнительными цитатами вокруг него.
Например, SSID internet
возвращается как "internet"
.
Это видно только на желе bean 4.2 с помощью устройства Nexus 7.
Эта ошибка вызывает ошибки в нашем приложении, поскольку мы сравниваем текущий SSID с SSID, который мы также пытаемся подключить.
Однако код wifiManager.getScanResults();
возвращает все SSID без дополнительных кавычек.
Ответы
Ответ 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 }