В 2011 году я столкнулся с проблемой, о которой сообщалось в этой проблеме трекера, и хотел бы разработать подходящее решение. Я хотел бы показать пользователю все сетевые интерфейсы устройств Android, а также классифицировать их по их типу и независимо от того, активны они или нет. Я нацелен на API 15 как минимум.
Насколько я знаю, есть два способа получить информацию о сетевом интерфейсе:
-
С помощью встроенного класса Java
NetworkInterface
с помощьюNetworkInterface.getNetworkInterfaces()
. Это вернет объектыNetworkInterface
, содержащие информацию, такую как имя интерфейса, все IP-адреса, связанные с интерфейсом, и т.д. Для моего устройства (LG G3) я получаю интерфейсы, такие какlo
,wlan0
иrmnet0
. Это также возвращает информацию, такую как IP-адрес, MTU, маску подсети и широковещательный адрес, которые мне нужны. -
Используя службу Android API
ConnectivityManager
, используяaConnManager.getAllNetworkInfo()
. Это возвращает около 20 объектовNetworkInfo
для моего устройства, большинство из них не используются, но они включают типыMOBILE
,WIFI
,BLUETOOTH
и т.д. Это не включает в себя какие-либо сетевые параметры, такие как IP-адреса, MTU и т.д. как упоминалось выше.
Проблема, как объясняется в трекер, заключается в том, что нет встроенного способа сопоставления NetworkInfo
с NetworkInterface
или наоборот, и я хотел бы избежать использования имени интерфейса для сопоставления с соответствующим NetworkInfo
если это вообще возможно.
Поскольку у меня есть догадка, что это невозможно, есть ли список большинства потенциальных имен сетевых интерфейсов для большинства вендоров? rmnet[0-9]
представляется обычным для устройств с процессорами baseband Qualcomm и wlan[0-9]
для WiFi и т.д.
В худшем случае, я полагаю, я мог бы указать тип интерфейса как неизвестный, если имя интерфейса не соответствует общим шаблонам. Спасибо заранее.