network library fast descargar androidnetworking amitshekhar android android-networking

fast - http library android



Mapeo alternativo entre NetworkInfo y NetworkInterface (1)

Me enfrento a un problema que se informó en este problema de seguimiento en 2011 y me gustaría desarrollar una solución adecuada. Me gustaría mostrar todas las interfaces de red de un dispositivo Android al usuario, así como clasificarlas por su tipo y si están o no activas actualmente. Estoy apuntando a la API 15 como mínimo.

Que yo sepa, hay dos formas de obtener información de la interfaz de red:

  1. A través de la clase incorporada Java NetworkInterface usando NetworkInterface.getNetworkInterfaces() . Esto devolverá los objetos de NetworkInterface que contienen información como el nombre de la interfaz, todas las direcciones IP asociadas con la interfaz, etc. Para mi dispositivo (LG G3), obtengo interfaces como lo , wlan0 y rmnet0 . Esto también devuelve información como la dirección IP, MTU, máscara de subred y dirección de transmisión, que necesito.

  2. A través del servicio de aConnManager.getAllNetworkInfo() ConnectivityManager API de Android usando aConnManager.getAllNetworkInfo() . Esto devuelve alrededor de 20 objetos NetworkInfo para mi dispositivo, la mayoría no están en uso, pero incluyen los tipos MOBILE , WIFI , BLUETOOTH , etc. Esto no incluye ningún parámetro de red como direcciones IP, MTU, etc. como se mencionó anteriormente.

El problema que se explica en el rastreador es que no hay una forma integrada de asignar NetworkInfo a un NetworkInterface o viceversa, y me gustaría evitar el uso del nombre de la interfaz para asignarlo a la NetworkInfo adecuada si es posible.

Ya que tengo una corazonada que no es posible, ¿hay una lista en algún lugar de todos los posibles nombres de interfaz de red para la mayoría de los proveedores? rmnet[0-9] parece común para dispositivos con procesadores de banda base de Qualcomm, y wlan[0-9] para WiFi, etc.

En el peor de los casos, supongo que podría indicar el tipo de interfaz como desconocido si el nombre de la interfaz no coincide con ninguna plantilla común. Gracias por adelantado.


Desde la API 21, puede usar LinkProperties para obtener un objeto NetworkInterface fuera de un objeto de network :

ConnectivityManager manager = getSystemService(ConnectivityManager.class); LinkProperties prop = manager.getLinkProperties(network); NetworkInterface iface = NetworkInterface.getByName(prop.getInterfaceName());

Sin embargo, aunque se supone que getAllNetworkInfo() reemplaza a getAllNetworkInfo() (el primero, introducido en API 21, ha getAllNetworkInfo() este último en API 23), como en Android 6.0.1, no lo hace. getAllNetworks() no lista todas las redes (vea SO Q # 33374766 ). Parece un error.

Alternativamente, para informar al usuario sobre el estado de todas las conexiones de red, se puede registrar un conjunto de devoluciones de llamada para cada tipo de transporte disponible en NetworkCapabilities ( es decir , TRANSPORT_WIFI , TRANSPORT_ETHERNET , TRANSPORT_BLUETOOTH , TRANSPORT_BLUETOOTH & TRANSPORT_VPN ) usando registerNetworkCallback .