Android获取网络ip、netmask、gateway和dns

    今天测试兄弟提到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版本的才可以。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值