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.

  • Android Personalizar la exploración Wifi
  • Cómo puedo determinar la velocidad de Internet en mi aplicación Android
  • Android WifiLock WIFI_MODE_SCAN_ONLY no funciona
  • Conéctese con wifi particular programáticamente después de buscar las conexiones wifi disponibles
  • ¿Cómo puedo configurar ProxySettings y ProxyProperties en la conexión Wi-Fi de Android usando Java?
  • Cómo obtener la dirección IP del router wifi conectado en android mediante programación?
  • Obtener la dirección MAC del dispositivo: cuando el wifi está desactivado
  • ¿Cómo me conecto a una red Wi-Fi específica en Android mediante programación?
  • Android: eliminar la red con ciertos SSID
  • Problema con WifiManager.calculateSignalLevel (RSSI, 5)
  • Cómo obtener la fuerza de la señal de WiFi WiFi conectado?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.