Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get WIFI SSID in Android 9.0(PIE)?

How to get WIFI SSID in Android 9.0(PIE)? My code is working fine till android version 8.1.0 but it is not working on Android 9.0

ConnectivityManager connManager = (ConnectivityManager) activity.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
        if (networkInfo.isConnected()) {
            WifiManager wifiManager = (WifiManager) activity.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
            WifiInfo wifiInfo = wifiManager.getConnectionInfo();
            wifiInfo.getSSID();
            String name = networkInfo.getExtraInfo();
            String ssid = "\"" + wifiInfo.getSSID() + "\"";
}

But this code is not working on Android 9.0

like image 318
Abhinav Tiwari Avatar asked Oct 26 '18 09:10

Abhinav Tiwari


People also ask

Does my Android have a SSID?

How to find SSID on Android: Go to Settings > Wi-Fi. An SSID you are connected to will be shown above Connected.

How do I connect my Android 9 to Wi-Fi?

Turn On Wi-Fi On Android 9.0 and Up Tap Network & Internet. In the Network & Internet section, select Wi-Fi. Turn on the Wi-Fi toggle switch. Close the Settings app.


2 Answers

You can access to the ssid wifi that you are connnected to it in Android 8 with location permission, but in android 9 you have to turn on location. read more here: https://developer.android.com/about/versions/pie/android-9.0-changes-all

like image 121
Mohammad Davari Avatar answered Sep 19 '22 12:09

Mohammad Davari


Android version 9 (Pie) changes require Location to be enabled (by the user), or the call to getConnectioInfo() will fail, even if your app has correct permissions. This is documented in the Android 9 changes (excerpt below):


Restricted access to Wi-Fi location and connection information

In Android 9, the permission requirements for an app to perform Wi-Fi scans are more strict than in previous versions. For details, see Wi-Fi scanning restrictions.

Similar restrictions also apply to the getConnectionInfo() method, which returns a WifiInfo object describing the current Wi-Fi connection. You can only use this object's methods to retrieve SSID and BSSID values if the calling app has the following permissions:

  • ACCESS_FINE_LOCATION or ACCESS_COARSE_LOCATION
  • ACCESS_WIFI_STATE

Retrieving the SSID or BSSID also requires location services to be enabled on the device (under Settings > Location).


In my case, I call the function below (only if running on Android 9+) to detect if location is enabled, prior to attempting to read the WIFI SSID.

public static boolean isLocnEnabled(Context context) {
    List locnProviders = null;
    try {
        LocationManager lm =(LocationManager) context.getApplicationContext().getSystemService(Activity.LOCATION_SERVICE);
        locnProviders = lm.getProviders(true);

        return (locnProviders.size() != 0);
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (BuildConfig.DEBUG) {
            if ((locnProviders == null) || (locnProviders.isEmpty()))
                Log.d(TAG, "Location services disabled");
            else
                Log.d(TAG, "locnProviders: " + locnProviders.toString());
        }
    }
    return(false);
}

If location is not enabled, I pop up a dialog that says it's required, and allows the user to jump to the location settings page (see code below):

context.startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
like image 41
gOnZo Avatar answered Sep 22 '22 12:09

gOnZo