Get SSID when WIFI is connected
Starting with Android 8.1 (API 27), apps must be granted the ACCESS_COARSE_LOCATION
(or ACCESS_FINE_LOCATION
) permission in order to obtain results from WifiInfo.getSSID()
or WifiInfo.getBSSID()
. Apps that target API 29 or higher (Android 10) must be granted ACCESS_FINE_LOCATION
.
This permission is also needed to obtain results from WifiManager.getConnectionInfo()
and WifiManager.getScanResults()
although it is not clear if this is new in 8.1 or was required previously.
Source: "BSSID/SSID can be used to deduce location, so require the same location permissions for access to these WifiInfo fields requested using WifiManager.getConnectionInfo() as for WifiManager.getScanResults()."
I listen for WifiManager.NETWORK_STATE_CHANGED_ACTION in a broadcast receiver
if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(action)) {
NetworkInfo netInfo = intent.getParcelableExtra (WifiManager.EXTRA_NETWORK_INFO);
if (ConnectivityManager.TYPE_WIFI == netInfo.getType ()) {
...
}
}
I check for netInfo.isConnected()
. Then I am able to use
WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
WifiInfo info = wifiManager.getConnectionInfo();
String ssid = info.getSSID();
UPDATE
From android 8.0 onwards we wont be getting SSID of the connected network unless location services are enabled and your app has the permission to access it.