Obtener SSID cuando WIFI está conectado

Intento obtener el SSID de la red WIFI cuando mi dispositivo Android está conectado a WIFI.

He registrado un BroadcastReceiver escuchando por android.net.wifi.supplicant.CONNECTION_CHANGE . Recibo la notificación cuando WIFI se desconecta o se vuelve a conectar. Lamentablemente, no puedo obtener el SSID de la red.

Estoy usando el siguiente código para encontrar el SSID:

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

En lugar del SSID, la cadena .

Estos son los permisos en el manifiesto (he agregado ACCESS_NETWORK_STATE solo para verificar, realmente no lo necesito)

     

¿Por qué pasó esto? ¿Cómo puedo obtener el SSID real? ¿La transmisión se activa antes de que se establezca la conexión? ¿Hay otra transmisión que deba escuchar? Solo me interesan las conexiones WIFI, no las conexiones 3G.

Actualización: acabo de verificar, wifiInfo.getBSSID() devuelve nulo.

Escucho a WifiManager.NETWORK_STATE_CHANGED_ACTION en un receptor de difusión

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

Verifico por netInfo.isConnected (). Entonces puedo usar

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

ACTUALIZAR

Desde Android 8.0 en adelante, no obtendremos el SSID de la red conectada a menos que el GPS esté encendido.

A partir de Android 8.1 (API 27), las aplicaciones deben tener permiso de ACCESS_COARSE_LOCATION (o ACCESS_FINE_LOCATION ) para obtener resultados de WifiInfo.getSSID() o WifiInfo.getBSSID() .

Este permiso también es necesario para obtener resultados de WifiManager.getConnectionInfo() y WifiManager.getScanResults() aunque no está claro si esto es nuevo en 8.1 o si se requirió previamente.

Fuente : “BSSID / SSID se puede utilizar para deducir la ubicación, por lo que requieren los mismos permisos de ubicación para acceder a estos campos de WifiInfo solicitados utilizando WifiManager.getConnectionInfo () como para WifiManager.getScanResults ()”.

Si no quieres hacer Broadcast Receiver, prueba

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

Recuerde que cada vez que el usuario se desconecta o se conecta al nuevo SSID o cualquier cambio de estado de wifi, entonces debe inicializar WifiInfo, es decir, wifiInfo = wifiManager.getConnectionInfo();

En Android 8.1, es necesario activar la ubicación para obtener el SSID; de lo contrario, puede obtener el estado de conexión pero no el 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*/ 

Este es un seguimiento de la respuesta dada por @EricWoodruff.

Puede usar netInfo getExtraInfo() para obtener wifi SSID.

 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) } } 

Si no está utilizando BroadcastReceiver, marque esta respuesta para obtener SSID usando Context

Esto se prueba en Android Oreo 8.1.0

Verifique a través de NetworkInfo para wifi si está conectado. Y luego use wifiinfo getSSid (). Es posible que desee eliminar barras dobles del SSID de devolución

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

Debería consultar esta aplicación y la API del desarrollador en http://developer.android.com/reference/android/net/wifi/WifiInfo.html

Te ayudará con tu tarea.