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?
- Cómo puedo determinar la velocidad de Internet en mi aplicación Android
- ¿Cómo puedo configurar ProxySettings y ProxyProperties en la conexión Wi-Fi de Android usando Java?
- ¿Qué intervalo debo usar entre cada exploración WiFi en Android?
- Android M: no se puede quitar Wi-Fi AP programáticamente
- Compruebe si la red ScanResult ya está configurada (existe en la lista getConfiguredNetworks ())
- Conéctese con wifi particular programáticamente después de buscar las conexiones wifi disponibles
- Android Personalizar la exploración Wifi
- ¿Hay alguna manera de ser notificado cuando las redes wifi SSIS conocidas entran o salen del rango?
- Android.net.wifi.STATE_CHANGE: no se activa en Wifi desconectar
- Android Wi-Fi Direct leer la intensidad de la señal rssi
- SecurityException al obtener los resultados de la exploración Wifi
- Cómo conectarse a un elemento Wifi ScanResult
- Android prueba la conexión wifi programáticamente
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.