今天测试兄弟提到P版本发现没有以前设置的网络相关的prop,求助是否可以提供一下可用的demo代码来说明通过调用android api如何获取。网上搜了下,主要的方式有Java的NetworkInterface,Android的ConnectivityManager、WifiManager和EthernetManager。后来发现Network获取的信息不全,WifiManager可以直接获取DhcpInfo但是不适用其他类,EthernetManager更是框架内部可用的类,除非是platform签名System权限的应用才能调到,也就只有ConnectivityManager一种方式。

    主要思路是通过ConnectivityManager getLinkProperties API拿到包含通用网络信息的LinkProperties对象

1.ip地址和子网掩码。getLinkAddress返回的是包含ipAddr和netmask信息的LinkAddress集合,其实就是ipv4和ipv6。linkAddress getAddress得到的是InetAddress对象。getHostAddress得到的是最终地址字串。getPrefixLength得到的是前缀,也就是对应的1的个数,需要做特殊处理下。代码不贴了,其实就是移位运算,可以参考下下面链接。

https://blog.csdn.net/u013894427/article/details/52472102

2.dns.。getDnsServers(),得到的是InetAddress对象列表,在遍历getHostAddress即可。

3.gateway。getRouteInfo(), 得到的是路由信息RouteInfo对象列表,RouteInfo内部有gateway对应的InetAddress对象。

当然,这要求API至少是M版本的才可以。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐