Как получить WIFI SSID в Android 9.0 (PIE)? - PullRequest
0 голосов
/ 26 октября 2018

Как получить WIFI SSID в Android 9.0 (PIE)?Мой код работает нормально до Android версии 8.1.0, но он не работает на 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() + "\"";
}

Но этот код не работает на Android 9.0

Ответы [ 3 ]

0 голосов
/ 30 января 2019

Изменения Android версии 9 (Pie) требуют, чтобы Location был включен (пользователем), или вызов getConnectioInfo () не удастся, даже если ваше приложение имеет правильные разрешения. Это задокументировано в Android 9 изменениях (выдержка ниже):


Ограниченный доступ к местоположению Wi-Fi и информации о подключении

В Android 9 требования к разрешению приложения для сканирования Wi-Fi более строгие, чем в предыдущих версиях. Подробнее см. Ограничения сканирования Wi-Fi.

Аналогичные ограничения также применяются к методу getConnectionInfo (), который возвращает объект WifiInfo, описывающий текущее соединение Wi-Fi. Методы этого объекта можно использовать только для получения значений SSID и BSSID, если вызывающее приложение имеет следующие разрешения:

  • ACCESS_FINE_LOCATION или ACCESS_COARSE_LOCATION
  • ACCESS_WIFI_STATE

Для получения SSID или BSSID также необходимо, чтобы на устройстве были включены службы определения местоположения (в меню «Настройки»> «Местоположение»).


В моем случае я вызываю указанную ниже функцию (только если она работает на Android 9+), чтобы определить, включено ли местоположение, прежде чем пытаться прочитать WIDI 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);
}

Если местоположение не включено, я выскакиваю диалоговое окно, которое говорит, что это необходимо, и позволяет пользователю перейти на страницу настроек местоположения (см. Код ниже):

context.startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
0 голосов
/ 04 июля 2019

Вы можете получить доступ к ssid wifi, к которому вы подключены, в Android 8 с разрешением местоположения, но в android 9 вы должны включить местоположение. читайте больше здесь: https://developer.android.com/about/versions/pie/android-9.0-changes-all

0 голосов
/ 26 октября 2018

Это относится к разрешениям .... начиная с уровня API 27 вам нужно либо разрешение ACCESS_FINE_LOCATION, либо ACCESS_COARSE_LOCATION. Вам также может понадобиться CHANGE_WIFI_STATE для Android 9 (в любом случае это относится к сканированию Wi-Fi согласно https://developer.android.com/guide/topics/connectivity/wifi-scan)

...