Obtener el protocolo Wi-Fi (802.11a / b / g / n) mediante programación

A través de WifiManager, mi aplicación para Android puede obtener muchos detalles sobre Wi-Fi. Sin embargo no consigo el tipo del protocolo como a / b / g / n. Tengo un requisito del cliente para hacer eso.

¿Alguien sabe cómo lograrlo? (No tengo la opción de usar adb). Se debe hacer mediante programación. Creo firmemente que el dispositivo y el ranurador han negociado ya el protocolo antes de que puedan conectar. Así que la información está ahí con el dispositivo. La pregunta es, ¿cómo lo conseguimos?

Usted puede deducir parcialmente el protocolo de la velocidad del enlace

WifiManager.getConnectionInfo().getLinkSpeed()

Por la tabla de la velocidad de los protocolos 802.11 de Wikipedia usted puede decir si es 802.11b, 802.11n o 802.11ag.
802.11n y 802.11ac tablas de velocidad de enlace completo

Las velocidades de enlace de los protocolos 802.11a y 802.11g son las mismas, se puede distinguir entre ellas por la frecuencia utilizada (5GHz o 2,4GHz) en los resultados del análisis.

Tenga en cuenta que el protocolo puede cambiar durante la conexión, el cliente y el punto de acceso negociar protocolos y velocidades, pero están de acuerdo en una lista y no en una velocidad específica.

No creo que haya una manera de distinguir entre 802.11n y 802.11ac en sus velocidades superpuestas.

No creo que esto sea posible para conseguir de una manera limpia. Los protocolos -a, b, g, n, etc.- son en realidad abstracciones humanas de la capa MAC y física en redes. Se definen como sus letras reconocibles si cumplen ciertas especificaciones de hardware, tanto para el dispositivo como para el dispositivo de red.

Después de hacer un poco de excavación, parece que los teléfonos con Windows son capaces de mostrar esta información . Al cavar en la forma de determinar el protocolo en Windows, me encontré con la explicación de escritorio , así como la implementación de Visual C ++ a través de enums . Parece que incluso la documentación oficial de Windows se basa en datos proporcionados por el proveedor y valores enumerados, lo que me llevaría a creer que necesitan determinar las especificaciones de hardware más allá de lo que probablemente está expuesto en la API de Android .

Si desea determinar el protocolo usted mismo, tendrá que entender la velocidad del enlace, así como la frecuencia, la modulación y el ancho de banda .

TL, DR

Probablemente no es posible a menos que esté trabajando con un teléfono con raíz y pueda acceder a las especificaciones de hardware directamente.

  • ¿Por qué WifiConfiguration.BSSID siempre es nulo?
  • Cómo determinar mediante programación si android está conectado a wifi?
  • WifiManager devuelve BSSID 00: 00: 00: 00: 00: 00
  • Android WifiLock WIFI_MODE_SCAN_ONLY no funciona
  • Android WifiManager getScanResult se queja Necesita el permiso ACCESS_COARSE_LOCATION o ACCESS_FINE_LOCATION aunque el permiso declarado
  • Cómo obtener la fuerza de la señal de WiFi WiFi conectado?
  • ¿Cómo ser notificado cuando un compañero ya no está disponible en la gama Wi-Fi Direct?
  • WifiManager.is5GHzBandSupported () mentir?
  • Establecer IP estática y pasarela programáticamente en Android 6.x (Marshmallow)
  • ¿Puedo usar WiFi para transferir datos / mensajes entre dos teléfonos Android, no conectados a un enrutador?
  • Thread colgar en WifiManager.enableNetwork ()
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.