最近有个项目需要获取手机Ip的,不仅仅是WiFi的Ip地址,还有 不开WiFi时的Ip(无线网卡)。网上对与手机无线网卡Ip获取的例子比较少,这里分享一下自己的写法,有帮助的麻烦给个点赞,评论 谢谢谢谢谢谢~~
- 1、获取手机服务和当前网络信息(流程还是要有的)
connectivityManager= context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
info = connectivityManager?.activeNetworkInfo //获取当前网络信息
if(info.type ==ConnectivityManager.TYPE_WIFI){
return getWifiIp(); //返回wifiip
}else{
return getMobileIp() //返回无线网卡ip(移动网络)
}
- 2、获取WiFi的Ip
这个比较简单,这里直接贴代码
private fun getWifiIp():String{
val wifiManager = context?.getApplicationContext()?.getSystemService(Context.WIFI_SERVICE) as WifiManager
val wifiInfo = wifiManager.connectionInfo
val ipAddress = wifiInfo.ipAddress
Log.i("getIp",ipAddress.toString()+"")
val ip =(ipAddress and 0xff).toString() + "." + (ipAddress shr 8 and 0xff) + "." + (ipAddress shr 16 and 0xff) + "." + (ipAddress shr 24 and 0xff)
return ip;
}
- 3、获取其他接口的Ip(重点)
手机上其实有许多的设备Ip,我们这里只需要获取我们自己需要的,大伙可以用adb 连接上自己的手机输入ifconfig查看
数据线链接手机,开启USB调试(会吧)
adb shell -> ifconfig
以下是没打开热点的手机
(其它种类代表啥,欢迎各位大佬评论区科普一下)
开手机热点
那个绿绿的家伙就是我们要获取的ip
- 4、遍历网络接口,获取手机ip
private fun getMobileIp():String{
var en = NetworkInterface.getNetworkInterfaces()//获取所有网络接口
var i=0
while(en.hasMoreElements()){
var nif = en.nextElement()
var eip = nif.inetAddresses
while(eip.hasMoreElements()){//获取接口的地址
var ia = eip.nextElement()
if (nif.displayName.contains("wlan0")){ //获取无线网卡Ip地址
if (checkIp(ia.hostAddress)){
return ia.hostAddress
}
}
}
}
return "0.0.0.0"
}
private fun checkIp(ip:String):Boolean{
if (ip.split(".").size==4&&!ip.equals("127.0.0.1")){
return true
}
return false
}
如果加上打印,结果会是这样子
收工~