Получить SSID при подключении WIFI

Я пытаюсь получить SSID сети WIFI, когда мое устройство Android подключено к WIFI.

Я зарегистрировал BroadcastReceiver, который прослушивает android.net.wifi.supplicant.CONNECTION_CHANGE . Я получаю уведомление, когда WIFI отключен или повторно подключен. К сожалению, я не могу получить SSID сети.

Я использую следующий код, чтобы найти SSID:

 WifiManager wifiManager = (WifiManager) context.getSystemService(context.WIFI_SERVICE); WifiInfo wifiInfo = wifiManager.getConnectionInfo(); String ssid = wifiInfo.getSSID(); 

Вместо SSID я возвращаю строку .

Это разрешения в манифесте (я добавил ACCESS_NETWORK_STATE, чтобы проверить, мне это действительно не нужно)

     

Почему это происходит? Как я могу получить фактический SSID? Является ли трансляция раньше, прежде чем соединение будет установлено? Есть ли еще одна трансляция, которую я должен слушать? Меня интересуют только WIFI-соединения, а не 3G-соединения.

Обновление: я только что проверил, wifiInfo.getBSSID() возвращает null.

Я слушаю WifiManager.NETWORK_STATE_CHANGED_ACTION в широковещательном приемнике

 if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals (action)) { NetworkInfo netInfo = intent.getParcelableExtra (WifiManager.EXTRA_NETWORK_INFO); if (ConnectivityManager.TYPE_WIFI == netInfo.getType ()) { 

Я проверяю netInfo.isConnected (). Тогда я могу использовать

 WifiManager wifiManager = (WifiManager) getSystemService (Context.WIFI_SERVICE); WifiInfo info = wifiManager.getConnectionInfo (); String ssid = info.getSSID(); 

ОБНОВИТЬ

Начиная с android 8.0, мы не будем получать SSID подключенной сети, если GPS не включен.

Начиная с Android 8.1 (API 27) приложениям должно быть предоставлено разрешение ACCESS_COARSE_LOCATION (или ACCESS_FINE_LOCATION ) для получения результатов от WifiInfo.getSSID() или WifiInfo.getBSSID() .

Это разрешение также необходимо для получения результатов от WifiManager.getConnectionInfo() и WifiManager.getScanResults() хотя неясно, является ли это новым в 8.1 или требовалось ранее.

Источник : «BSSID / SSID можно использовать для определения местоположения, поэтому для доступа к этим полям WifiInfo, запрошенным с использованием WifiManager.getConnectionInfo (), требуются одинаковые разрешения на размещение для WifiManager.getScanResults ()».

Если вы не хотите делать широковещательный приемник, попробуйте попробовать

 WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); WifiInfo wifiInfo; wifiInfo = wifiManager.getConnectionInfo(); if (wifiInfo.getSupplicantState() == SupplicantState.COMPLETED) { ssid = wifiInfo.getSSID(); } 

Помните каждый раз, когда пользователь отключается или подключается к новому SSID или любому изменению состояния wifi, тогда вам нужно инициализировать WifiInfo, т. wifiInfo = wifiManager.getConnectionInfo();

В Android 8.1 необходимо включить Location on для получения SSID, если вы не можете получить состояние соединения, но не SSID

 WifiManager wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE); WifiInfo wifiInfo = null; if (wifiManager != null) wifiInfo = wifiManager.getConnectionInfo(); String ssid = null; if (wifiInfo != null) ssid = wifiInfo.getSSID(); /*you will get SSID  if location turned off*/ 

Это последует за ответом @EricWoodruff.

Вы можете использовать netInfo getExtraInfo() для получения SSID Wi-Fi.

 if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals (action)) { NetworkInfo netInfo = intent.getParcelableExtra (WifiManager.EXTRA_NETWORK_INFO); if (ConnectivityManager.TYPE_WIFI == netInfo.getType ()) { String ssid = info.getExtraInfo() Log.d(TAG, "WiFi SSID: " + ssid) } } 

Если вы не используете BroadcastReceiver, проверьте этот ответ, чтобы получить SSID с помощью Context

Это проверено на Android Oreo 8.1.0

Проверьте через NetworkInfo для wifi-типа, если он подключен. А затем используйте wifiinfo getSSid (). Возможно, вы захотите удалить двойные косые черты из идентификатора SSID возврата

https://play.google.com/store/apps/details?id=com.connect.freewifi

Вы должны проверить это приложение и разработчика api из http://developer.android.com/reference/android/net/wifi/WifiInfo.html

Это поможет вам с вашей задачей.

  • Включение WiFi в эмулятор Android
  • Может ли Android сделать одноранговую сеть ad-hoc?
  • Как рассчитать расстояние от Wifi-маршрутизатора, используя силу сигнала?
  • Почему Wi-Fi-соединение на моем смартфоне работает лучше, чем одно соединение на моем ноутбуке?
  • Как получить имя Wi-Fi-сети из Android с помощью API Android?
  • Acer Aspire V5 подключается к беспроводной сети и проблема близости
  • Как пользователи / разработчики могут установить конфигурацию прокси-сервера Android для версий 2.x?
  • Запуск / установка / отладка приложений Android через Wi-Fi?
  • Как избежать задержки в сообщениях Android GCM / изменении сердечного ритма
  • Проверьте Wi-Fi и GPS-соединение или нет в Android?
  • Как программно создавать и читать конфигурации WEP / EAP WiFi в Android?
  • Interesting Posts
    Давайте будем гением компьютера.