Android获取IPV4的方法
16lz
2022-05-19
我是最近才接触Android的Android小白,领导给了一个任务让我去写一个获取手机IP地址的功能,这些东西网上应该有很多类似的,貌似很简单。于是上网搜了很多。开始找到的是这种方法
发现代码没有飘红,测试一下,能够获取wifi情况下的IPV4和4G的IPV4,如果没有数据流量关了,也能够返回一个空值。
public String getLocalHostIp() { String ipaddress = ""; try { Enumeration en = NetworkInterface .getNetworkInterfaces(); // 遍历所用的网络接口 while (en.hasMoreElements()) { NetworkInterface nif = en.nextElement();// 得到每一个网络接口绑定的所有ip Enumeration inet = nif.getInetAddresses(); // 遍历每一个接口绑定的所有ip while (inet.hasMoreElements()) { InetAddress ip = inet.nextElement(); if (!ip.isLoopbackAddress() && InetAddressUtils.isIPv4Address(ip .getHostAddress())) { return ipaddress = "本机的ip是" + ":" + ip.getHostAddress(); } } } } catch (SocketException e) { Log.e("feige", "获取本地ip地址失败"); e.printStackTrace(); } return ipaddress; }
然后我就自己用Android Studio自己创建了一个项目,来试试能不能获取手机的IP地址(因为网上很多,我就不写要添加的权限),代码复制到了Android Studio上去,发现InetAddressUtils 这个飘红,上网搜了一下发现要用这个东西需要引入 commons-lang.jar这个第三方包。我不是太想引入第三方包,就考虑用其他的方法解决,在打InetAddress的时候发现AS提示了Inet4Address 这个类,上去搜了一下Inet4Adress的用法 发现用Inet4Adress可以判断是否是IPV4的地址。我就把代码改成了下面的样子 public String GetIp() { try { for (Enumeration en = NetworkInterface .getNetworkInterfaces(); en.hasMoreElements();) { NetworkInterface intf = en.nextElement(); for (Enumeration ipAddr = intf.getInetAddresses(); ipAddr .hasMoreElements();) { InetAddress inetAddress = ipAddr.nextElement(); // ipv4地址 if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address) { return inetAddress.getHostAddress(); } } } } catch (Exception ex) { } return null; }
发现代码没有飘红,测试一下,能够获取wifi情况下的IPV4和4G的IPV4,如果没有数据流量关了,也能够返回一个空值。
更多相关文章
- WebView Android(安卓)调用js且须要获取返回结果
- 获得SDCard的路径
- Android(安卓)之 ContentProvider 共享数据库-通讯录
- android实现获取有线和无线Ip地址的方法
- 我的Android进阶之旅------>Android百度地图定位SDK功能学习
- (转)Android软件测试的日志文件抓取简介
- Android编译出现DSL element android.dataBinding.enabled is ob
- android-获取手机电话的状态
- Android(安卓)studio 学习6:配置Bmob SDK