jpa*_*alm 42 android android-networking
我正面临2011年在跟踪器问题中报告的问题,并希望开发一个合适的解决方法.我想向用户显示所有Android设备的网络接口,并按类型分类,以及它们当前是否处于活动状态.我至少要针对API 15.
据我所知,有两种方法可以获取网络接口信息:
通过内置的Java NetworkInterface类使用NetworkInterface.getNetworkInterfaces().这将返回NetworkInterface包含如接口名称信息的对象,与接口等.对于我的设备(LG G3)相关联的所有IP地址,我得到这样的接口lo,wlan0和rmnet0.这也会返回我需要的IP地址,MTU,子网掩码和广播地址等信息.
通过Android API ConnectivityManager服务使用aConnManager.getAllNetworkInfo().这将返回约20 NetworkInfo我的设备对象,大多数是不使用的,但它们包括类型MOBILE,WIFI,BLUETOOTH,等等.这不包括任何网络参数,如IP地址,MTU等如上所述.
跟踪器中解释的问题是没有内置的方法来映射NetworkInfo到a NetworkInterface或反之亦然,我想避免使用接口名称映射到适当的,NetworkInfo如果可能的话.
既然我有预感是不可能的,那么大多数供应商的所有潜在网络接口名称中都有一个列表吗?rmnet[0-9]对于使用Qualcomm基带处理器和wlan[0-9]WiFi等设备来说似乎很常见.
在最坏的情况下,我想如果接口名称与任何常见模板不匹配,我可以将接口类型列为未知.提前致谢.
从 API 21 开始,您可以使用从对象中LinkProperties获取对象:NetworkInterfaceNetwork network
ConnectivityManager manager = getSystemService(ConnectivityManager.class);
LinkProperties prop = manager.getLinkProperties(network);
NetworkInterface iface = NetworkInterface.getByName(prop.getInterfaceName());
Run Code Online (Sandbox Code Playgroud)
然而,尽管getAllNetworks()应该取代getAllNetworkInfo()(前者在 API 21 中引入,后者在 API 23 中已弃用),但从 Android 6.0.1 开始,它并没有取代。getAllNetworks() 未列出所有网络(请参阅SO Q#33374766)。看起来像一个错误。
或者,为了通知用户所有网络连接的状态,可以使用 为NetworkCapability中可用的每种传输类型(即 TRANSPORT_CELLULAR, TRANSPORT_WIFI, TRANSPORT_ETHERNET, TRANSPORT_BLUETOOTH& TRANSPORT_VPN)注册一组回调registerNetworkCallback。
| 归档时间: |
|
| 查看次数: |
1404 次 |
| 最近记录: |