Получить 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 я возвращаю строку <unknown ssid> .

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

 <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 

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

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

Solutions Collecting From Web of "Получить SSID при подключении WIFI"

Я слушаю 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(); 

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

 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();

Простой и простой способ.

 public String getWifiName(Context context) { WifiManager manager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); if (manager.isWifiEnabled()) { WifiInfo wifiInfo = manager.getConnectionInfo(); if (wifiInfo != null) { DetailedState state = WifiInfo.getDetailedStateOf(wifiInfo.getSupplicantState()); if (state == DetailedState.CONNECTED || state == DetailedState.OBTAINING_IPADDR) { return wifiInfo.getSSID(); } } } return null; } 

Проверьте через 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.

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