Получить SSID при подключении WIFI
Я пытаюсь получить SSID сети WIFI, когда мое устройство Android подключено к WIFI.
Я зарегистрировал BroadcastReceiver, который прослушивает android.net.wifi.supplicant.CONNECTION_CHANGE
. Я получаю уведомление, когда WIFI отключен или повторно подключен. К сожалению, я не могу получить SSID сети.
Я использую следующий код, чтобы найти SSID:
- Как получить доступные точки доступа Wi-Fi и их уровень сигнала в .net?
- Список Wifi пуст в Windows 10
- Как передавать файлы между устройствами Android с помощью Wi-Fi Direct?
- В гостевой сети Windows 7 используется один адаптер для приема и второй адаптер для создания хост-сети
- Доступ к информации о WiFi в iPhone через SDK
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.
- Как рассчитать расстояние от Wifi-маршрутизатора, используя силу сигнала?
- Android включает и отключает Wi-Fi HotSpot программно
- Запуск / установка / отладка приложений Android через Wi-Fi?
- API 2.2 для Wi-Fi Wi-Fi
- Как программно создавать и читать конфигурации WEP / EAP WiFi в Android?
- Точка доступа Wi-Fi с учетной записью
- Android: Имитировать Wi-Fi в эмуляторе?
- Проверьте Wi-Fi и GPS-соединение или нет в Android?
Я слушаю 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
Это поможет вам с вашей задачей.