Android 正确的获取Ip地址,包括无线网卡Ip

2 篇文章 0 订阅
1 篇文章 0 订阅

最近有个项目需要获取手机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
}

如果加上打印,结果会是这样子

收工~

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值