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.

  • Cómo obtener la dirección IP del router wifi conectado en android mediante programación?
  • ¿La cerradura de WiFi no trabaja, cómo prevenir el ahorro de la energía del wifi?
  • Android WifiLock WIFI_MODE_SCAN_ONLY no funciona
  • WifiManager devuelve BSSID 00: 00: 00: 00: 00: 00
  • Thread colgar en WifiManager.enableNetwork ()
  • Android Wi-Fi Direct leer la intensidad de la señal rssi
  • Problema con WifiManager.calculateSignalLevel (RSSI, 5)
  • Compruebe si la red ScanResult ya está configurada (existe en la lista getConfiguredNetworks ())
  • Cómo crear WPA personalizado Hotspot con ssid y contraseña en android?
  • Determine el ancho de banda de conexión de red (velocidad) wifi y datos móviles
  • Android wifimanager siempre devuelve true
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.