0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

android如何获取本机ip地址及ip归属地

IP数据云 来源:IP数据云 作者:IP数据云 2024-11-20 11:57 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

# 前言 #
本篇文章主要介绍android如何获取本机ip地址及ip归属地。

# 定义 #
ip地址是指手机在连接到互联网时所获得的唯一网络地址。
ip归属地是指通过ip地址查询器对应的地理位置信息,如省市区等信息。

# 获取ip地址 #
如果只是查看本机ip,不涉及应用开发,可以依次打开手机设置-我的设备-状态信息-ip地址界面进行查看(不同品牌手机型号会有差异)。
下面开发过程中获取本机ip方法:
1.首先是要在清单文件中配置必要的权限:



2.手机在不同的网络环境下获取ip的方法:
//获取ip
public void getIPAddress(Context context) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = cm.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnectedOrConnecting()) {
//网络连接可用,判断网络连接类型
if (networkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
//wifi网络
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
int ipAddress = wifiInfo.getIpAddress();
String ip = String.format("%d.%d.%d.%d",
(ipAddress & 0xff),
(ipAddress >> 8 & 0xff),
(ipAddress >> 16 & 0xff),
(ipAddress >> 24 & 0xff));
Log.e("tag", "ip:" + ip);
} else if (networkInfo.getType() == ConnectivityManager.TYPE_MOBILE) {
//移动网络
getLocalIpAddress();
}
} else {
//没有网络链接
}
}
private void getLocalIpAddress() {
try {
ArrayList networkInterfaces = Collections.list(NetworkInterface.getNetworkInterfaces());
for (NetworkInterface networkInterface : networkInterfaces) {
ArrayList inetAddresses = Collections.list(networkInterface.getInetAddresses());
for (InetAddress address : inetAddresses) {
String ip = address.getHostAddress();
if (!address.isLoopbackAddress() && (address instanceof Inet4Address)) {
Log.e("tag", "ipv4:" + ip);
}
if (!address.isLoopbackAddress() && (address instanceof Inet6Address)) {
Log.e("tag", "ipv6:" + ip);
}
}
}
} catch (SocketException socketException) {
Log.e("tag", socketException.getMessage());
}
}
# 获取ip归属地 #
想要获取到ip归属地,一般需要获取到ip地址后通过第三方服务来查询,下面展示一下android使用ip数据云获取ip归属地的具体方法:
//获取ip归属地
private Location getIpData(String ip, String key) {
Location location = null;
try {
URL url = new URL("https://api.ipdatacloud.com/v2/query?ip=" + ip + "&key=+" + key);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
StringBuffer sb = new StringBuffer();
String line;
while ((line = in.readLine()) != null) {
sb.append(line);
}
in.close();
connection.disconnect();
// 解析返回的JSON数据,获取IP归属地信息
// 这里需要使用JSON解析库,例如gson、fastjson
String jsonResult = sb.toString();
location = new Gson().fromJson(jsonResult, Location.class);
} catch (Exception e) {
e.printStackTrace();
}
return location;
}

class Location {
private String AreaCode; //行政区码
private String City; //城市
private String CityCode; //城市代码
private String Continent; //洲
private String Country; //国家/地区
private String CountryCode; //国家/地区英文简写
private String District; //区县
private String Elevation; //海拔
private String Ip; //ip地址
private String Isp; //运营商
private String Latitude; //纬度
private String Longitude; //经度
private Street[] MultiStreet; //历史街道位置
private String Province; //省份
private String Street; //街道
private String TimeZone; //时区
private String WeatherStation; //气象站
private String ZipCode; //邮编
}

class Street {
private String Lng; //经度
private String Lat; //纬度
private String Province; //省份
private String City; //城市
private String District; //区县
private String Street; //街道
private String Radius; //范围半径
private String ZipCode; //邮政编码
}
# 总结 #
本文简要总结了android获取ip地址及归属地的方法,在实际开发中还需要根据自身的实际情况进行修改。
在众多第三方服务中,ip数据云作为新一代ip地址数据服务领军者,为广大开发者提供了丰富的产品服务,具体可去官网https://www.ipdatacloud.com/?utm-source=WZJ&utm-keyword=?2826进行测试、咨询。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Android
    +关注

    关注

    12

    文章

    4035

    浏览量

    134494
  • IP
    IP
    +关注

    关注

    5

    文章

    1883

    浏览量

    156715
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    海外静态IP和海外动态IP有哪些区别?怎么选择?

    IP地址 你今天用是这个IP,明天还是这个IP,不会自动变化,如果你用的是海外静态IP,不管国内的IP
    的头像 发表于 04-13 12:36 93次阅读
    海外静态<b class='flag-5'>IP</b>和海外动态<b class='flag-5'>IP</b>有哪些区别?怎么选择?

    IP纯净度怎么查?

    不是出了问题之后的补救措施。花10分钟查清楚,能避免后续大量时间的损失。 二、四个必查工具和对应查什么 工具一:ipinfo.io 这是最基础的IP信息查询工具,能告诉你这个IP的ASN归属、地理位置、运营商类型。重点看「org
    的头像 发表于 04-03 15:52 728次阅读

    PLC和CNC出现IP冲突怎么办?如何解决?

    随着工厂数字化转型要求持续提升,越来越生产设备需要接入信息化管理系统实现统一管理。但多数企业在早期设备采购或新厂区建设时,未对设备IP地址进行统一规划,导致不同厂家设备或同型号多台设备出现IP
    的头像 发表于 04-01 13:44 167次阅读
    PLC和CNC出现<b class='flag-5'>IP</b>冲突怎么办?如何解决?

    如何高效修改西门子PLC的相同IP地址

    随着“智能制造”与“工业4.0”的持续推进,越来越自动化设备需接入信息化管理系统,但很多企业在早期设备采购或新增设备时,往往缺乏对设备 IP 地址进行统一规划,导致不同厂家设备或同型号多台设备出现
    的头像 发表于 12-16 13:52 611次阅读
    如何高效修改西门子PLC的相同<b class='flag-5'>IP</b><b class='flag-5'>地址</b>

    网段隔离器解决IP冲突问题,实现跨网段通信

    在互联网的世界里,每一台设备都如同拥有一个独特的“家庭住址”——IP地址。设备之间的通信,就如同人与人之间交流需要知道对方的住址一样,必须明确知晓目标设备的IP地址,才能将数据准确无误
    的头像 发表于 11-19 14:32 504次阅读
    网段隔离器解决<b class='flag-5'>IP</b>冲突问题,实现跨网段通信

    工业NAT网关实现PLC、机床等设备IP地址冲突的解决方案

    在工业自动化项目中,工程师经常会遇到一个问题——IP地址冲突。比如一台编写好程序的自动化设备,其内部PLC的IP地址是固定的192.168.1.1,在接入工厂局域网络时却发现无法联网,
    的头像 发表于 11-06 16:58 894次阅读
    工业NAT网关实现PLC、机床等设备<b class='flag-5'>IP</b><b class='flag-5'>地址</b>冲突的解决方案

    lwip如何实现运行中修改ip地址并使新的地址生效?

    应用中下位机做了一个TCP服务器,供作为客户机的PC访问,这个功能能已经好了。现在需要实现修改IP地址等网络参数的功能,看了ethernetif.c中的set_if()函数,只是调用
    发表于 10-14 07:57

    w5500dhcp无法获取ip怎么解决?

    spi驱动w5500,mac地址写入读取成功,但是获取ip、子网掩码都是0;
    发表于 09-26 06:58

    IP地址冲突导致德国站群服务器断网的解决方法?

    在网络管理中,IP地址冲突是一个常见且令人头疼的问题。尤其是对于依赖站群服务器进行大规模网络操作的企业而言,IP冲突可能会导致整个服务器群组无法正常工作,从而造成严重的业务中断。本文将探讨如何解决因
    的头像 发表于 08-12 15:47 884次阅读

    DDNS在路由器WAN为私网IP地址时无法使用,怎么解决?

    DDNS在路由器WAN为私网IP地址时无法使用,有没有其他解决方案?
    发表于 08-07 06:41

    请问InConnect 是否可以用实际 IP 而不是用虚拟 IP 映射实际IP

    但是这样子使用的话,我只能通过这个虚拟IP来连接设备,那样子我的PLC编程软件就不能连接上设备了因为IP和实际的不一样,我能通过什么办法来让映射出来的虚拟IP和我的实际设备IP一致吗?
    发表于 08-06 07:54

    CNC的IP地址相同冲突如何解决?

    在网络世界中,每个设备都需要一个独特的标识来确保信息的准确传输,这个标识就是IP地址。然而,在CNC(数控机床)生产车间中,由于存在多个品牌、不同型号的设备,且这些设备在出厂测试时往往会被配备相同
    的头像 发表于 07-23 14:13 885次阅读
    CNC的<b class='flag-5'>IP</b><b class='flag-5'>地址</b>相同冲突如何解决?

    从零开始学IP地址

    IP地址是一种网络编码,用来唯一标识网络中的设备,以确保主机间正常通信。IP地址由32位二进制(32-bit)组成。
    的头像 发表于 07-08 09:29 2184次阅读
    从零开始学<b class='flag-5'>IP</b><b class='flag-5'>地址</b>

    树莓派“定居”完全指南:一键设置静态IP,稳定又高效!

    当你为树莓派设置静态IP地址时,实际上是为它分配了一个固定地址,该地址不会改变,而动态IP地址
    的头像 发表于 05-25 08:32 1753次阅读
    树莓派“定居”完全指南:一键设置静态<b class='flag-5'>IP</b>,稳定又高效!

    内网穿透和公网ip什么区别

    原理:设备通过路由器获取独立的公网IP地址,直接暴露在互联网中。 典型配置: 向运营商申请固定公网IP(或动态公网IP+DDNS) 在路由
    的头像 发表于 05-14 14:18 792次阅读
    内网穿透和公网<b class='flag-5'>ip</b>什么区别