Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Jelly Bean Issue - wifiManager.getConnectionInfo().getSSID() - extra ""

Hi all bug reporting for your information. link

Problem details:

The Code - wifiManager.getConnectionInfo().getSSID()

The above code to returns the current SSID, it is returning the current SSID with extra quotations around it.

For eg. the SSID internet is returned as "internet".

This is only seen on Jelly bean 4.2 using device Nexus 7.

This bug is causing errors in our app as we compare the current SSID with the SSID that we are trying to connect too.

The code wifiManager.getScanResults(); however still returns all SSID's without extra quotation marks.


like image 582
Aiden Fry Avatar asked Nov 26 '12 10:11

Aiden Fry


2 Answers

this is not a bug and behavior is correct as per documentation at http://developer.android.com/reference/android/net/wifi/WifiInfo.html#getSSID()

The so-called bug apparently was in pre 4.2 devices, because they didn't return it with "" enclosure.

Aiden's method looks good to me in the current state of confusion left by Android. However, being theoritically correct would just require

if (ssid.startsWith("\"") && ssid.endsWith("\"")){
             ssid = ssid.substring(1, ssid.length()-1);
}
like image 110
kishu27 Avatar answered Oct 16 '22 06:10

kishu27


This regular expression is quite neat:

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

Just for the notes

Edit °1 (as per question in the comment):

The issue that OP describes is, that on some devices the SSID returned by getSSID() is enclosed in "" whereas it is not on other devices. E.g. on some devices the SSID is "MY_WIFI" and on others it is MY_WIFI - or spoken in Java code: "\"MY_WIFI\"" and "MY_WIFI".

In order to to unify both results I proposed to remove the " at start and end - only there, because " is a legal character inside the SSID. In the regular expression above

^ means from start
$ means at end
\" means " (escaped)
.* means any number of characters
(...) means a capturing group, that can be referred by $1

So the whole expression means: replace "<something>" by <something> where $1 = <something>. If there is no " at end/start, the regular expression doesn't match and nothing is replaced.

See Java Pattern class for more details.

like image 9
Trinimon Avatar answered Oct 16 '22 04:10

Trinimon