Android获取公网IP地址

Android想要获取公网IP地址,连接wifi的情况下在应用层开发的角度使用系统的API是做不到的,只能直接或间接利用第三方的接口服务:
1、公共接口:

搜狐:

http://pv.sohu.com/cityjson

返回格式:

var returnCitySN = {"cip": "XXXX", "cid": "XXX", "cname": "XX省XX市"};

淘宝(不稳定,经常访问不了):

http://ip.taobao.com/service/getIpInfo2.php?ip=myip

注意:淘宝的接口在请求时需要添加 “User-Agent” : “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.162 Safari/537.36 Edg/80.0.361.109”,因为淘宝的这个接口只能用于PC浏览器访问,所以需要添加该标识让服务器认为这个请求是PC浏览器发起的。

返回格式:

{"code":0,"data":{"ip":"XXXXXX","country":"中国","area":"","region":"XX","city":"XX","county":"XX","isp":"XX","country_id":"CN","area_id":"","region_id":"XXX","city_id":"XXX","county_id":"xx","isp_id":"XXX"}}

在APP中调用接口,然后手动解析出IP地址,另外这两个接口都是http请求,在高版本系统上会出现请求失败,是因为从Android 9.0开始默认禁止了http请求,可以通过清单文件添加配置解决:
Android获取公网IP地址_第1张图片
文件名随便起,文件内配置如下:


<network-security-config>
    <base-config cleartextTrafficPermitted="true" />
network-security-config>

优点:无需接入门槛即可使用。
缺点:不稳定,接口不可用或者有改动,会发生异常。

2、各个地图服务API,比如:腾讯位置服务、百度地图、高德地图等等,需要到各平台注册成为开发者后才能使用API,并且还可能存在调用次数的限制。

所以建议采用多种策略进行获取。

你可能感兴趣的:(Android)