gpt4 book ai didi

android - NetworkInfo 和 NetworkInterface 之间的解决方法映射

转载 作者:IT王子 更新时间:2023-10-28 23:57:16 37 4
gpt4 key购买 nike

我遇到了 this tracker issue 中报告的问题早在 2011 年,并希望开发一个合适的解决方法。我想向用户显示所有 Android 设备的网络接口(interface),并按它们的类型以及它们当前是否处于 Activity 状态对它们进行分类。我的目标至少是 API 15。

据我所知,获取网络接口(interface)信息的方法有两种:

  1. 通过使用 NetworkInterface.getNetworkInterfaces() 的内置 Java NetworkInterface 类。这将返回 NetworkInterface 对象,其中包含接口(interface)名称、与接口(interface)关联的所有 IP 地址等信息。对于我的设备 (LG G3),我得到像 lo 这样的接口(interface)、wlan0rmnet0。这还会返回我需要的 IP 地址、MTU、子网掩码和广播地址等信息。

  2. 通过 Android API ConnectivityManager 服务使用 aConnManager.getAllNetworkInfo()。这将为我的设备返回大约 20 个 NetworkInfo 对象,大多数都未使用,但它们包括类型 MOBILEWIFIBLUETOOTH等。这不包括上面提到的任何网络参数,如IP地址、MTU等。

跟踪器中解释的问题是没有内置方法将 NetworkInfo 映射到 NetworkInterface 或反之亦然,我想避免尽可能使用接口(interface)名称映射到适当的 NetworkInfo

由于我有一种不可能的预感,是否有一个列表列出了大多数供应商的所有潜在网络接口(interface)名称? rmnet[0-9] 似乎常见于配备高通基带处理器的设备,而 wlan[0-9] 则适用于 WiFi 等。

在最坏的情况下,如果接口(interface)名称与任何常见模板不匹配,我想我可以将接口(interface)类型列为未知。提前致谢。

最佳答案

从 API 21 开始,您可以使用 LinkProperties获取 NetworkInterface Network 中的对象网络对象:

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

然而,虽然getAllNetworks()应该替换 getAllNetworkInfo() (前者在 API 21 中引入,后者在 API 23 中已弃用),从 Android 6.0.1 开始,它没有。 getAllNetworks() 列出所有网络(参见 SO Q#33374766)。看起来像一个错误。

或者,为了通知用户所有网络连接的状态,可以为 NetworkCapabilities 中可用的每种传输类型注册一组回调。 ( TRANSPORT_CELLULARTRANSPORT_WIFITRANSPORT_ETHERNETTRANSPORT_BLUETOOTH & TRANSPORT_VPN)使用 registerNetworkCallback .

关于android - NetworkInfo 和 NetworkInterface 之间的解决方法映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31358582/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com