android获取ip方法,Android开发准确获取手机IP地址的两种方式
最近看了好多网上获取IP地址的例子,发现好多都不完全准确,这里我写一下获取ip地址的两种方式。
比如微信支付,后台在做接口的时候,要求App端传入IP地址,我们需要判断是网络环境,WI-FI还是3G,所以需要获取这两种环境的ip地址。
第一步:首先是判断网络环境:
String ip;
ConnectivityManager conMann = (ConnectivityManager)
this.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mobileNetworkInfo = conMann.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
NetworkInfo wifiNetworkInfo = conMann.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (mobileNetworkInfo.isConnected()) {
ip = getLocalIpAddress();
System.out.println("本地ip-----"+ip);
}else if(wifiNetworkInfo.isConnected())
{
WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
int ipAddress = wifiInfo.getIpAddress();
ip = intToIp(ipAddress);
System.out.println("wifi_ip地址为------"+ip);
}
如果连接的是移动网络,第二步,获取本地ip地址:getLocalIpAddress();这样获取的是ipv4格式的ip地址。
public String getLocalIpAddress() {
try {
String ipv4;
ArrayList nilist = Collections.list(NetworkInterface.getNetworkInterfaces());
for (NetworkInterface ni: nilist)
{
ArrayList ialist = Collections.list(ni.getInetAddresses());
for (InetAddress address: ialist){
if (!address.isLoopbackAddress() && InetAddressUtils.isIPv4Address(ipv4=address.getHostAddress()))
{
return ipv4;
}
}
}
} catch (SocketException ex) {
Log.e("localip", ex.toString());
}
return null;
}
如果连接的是WI-FI网络,第三步,获取WI-FI ip地址:intToIp(ipAddress);
public static String intToIp(int ipInt) {
StringBuilder sb = new StringBuilder();
sb.append(ipInt & 0xFF).append(".");
sb.append((ipInt >> 8) & 0xFF).append(".");
sb.append((ipInt >> 16) & 0xFF).append(".");
sb.append((ipInt >> 24) & 0xFF);
return sb.toString();
}
网上的很多代码获取的是ipv6的本地ip,在微信支付里这种ip地址无法调起微信支付,附代码:
private String getlocalIp() {
String ip;
try {
for (Enumeration en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
for (Enumeration enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress()&&!inetAddress.isLinkLocalAddress()) {
// ip=inetAddress.getHostAddress().toString();
System.out.println("ip=========="+inetAddress.getHostAddress().toString());
return inetAddress.getHostAddress().toString();
}
}
}
} catch (SocketException ex) {
Log.e("WifiPreference IpAddress", ex.toString());
}
return null;
}
本文主要介绍了Android准确获取手机IP地址的两种方式,更多关于Android获取手机IP地址的方式请查看下面的相关链接
android获取ip方法,Android开发准确获取手机IP地址的两种方式相关推荐
- Android获取IP地址的两种方式(准确版)
原文:https://blog.csdn.net/sinat_16458039/article/details/50260589 最近看了好多网上获取IP地址的例子,发现好多都不完全准确,这里我写一下 ...
- C# Windows Phone 8 WP8 开发,取得手机萤幕大小两种方法。
C# Windows Phone 8 WP8 开发,取得手机萤幕大小两种方法. 原文:C# Windows Phone 8 WP8 开发,取得手机萤幕大小两种方法. 一般我们在开发Windows Ph ...
- 获取距离某坐标附近一定范围内的点的两种方式
获取距离某坐标附近一定范围内的点的两种方式 场景:数据库中有一些点坐标,需要查找出距离当前位置2千米范围内的坐标 方式1:根据两个经纬度计算距离,Oracle/MySql计算地表两点之间的距离: Or ...
- 获取Executor提交的并发执行的任务返回结果的两种方式/ExecutorCompletionService使用...
当我们通过Executor提交一组并发执行的任务,并且希望在每一个任务完成后能立即得到结果,有两种方式可以采取: 方式一: 通过一个list来保存一组future,然后在循环中轮训这组future,直 ...
- C++ string获取文件路径文件名、文件路径、文件后缀(两种方式)
windows路径有两种方式,一种正斜杠,一种反斜杠都可以表示路径,该方法可以支持这两种表达方法 方法一:采用substr()进行分割 string path1 = "D:/datas/Fu ...
- Unity编辑器开发——通过模板创建Lua脚本的两种方式(二)
个人学习笔记,如有错误.疑问.建议,欢迎留言. 本文有关代码转载自:Unity3D 扩展编辑器实现创建Lua脚本 - 知乎 (zhihu.com) 声明:本文转载已取得原文章作者同意,有兴趣的可以关注 ...
- Unity编辑器开发——通过模板创建Lua脚本的两种方式(一)
个人学习笔记,如有错误.疑问.建议,欢迎留言. 声明:本文不得以任何形式进行转载. 前言:在Unity编辑器的Project界面,可以直接右键创建C#脚本,而目前许多游戏公司使用的是tolua.xl ...
- Android 获取手机IP地址的两种方式及常见问题
1.使用WIFI 添加权限 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE">& ...
- android 手表打电话,小米高管科普小米手表e-SIM打电话的两种方式
集微网消息(文/叶子),近日,小米生态链总经理@屈恒_小米在微博上科普,详细介绍了e-SIM.独立号码和一号双终端的问题,我们一起来看一下. 屈恒表示,大家都知道手机能打电话,前提是装了SIM卡,但是 ...
最新文章
- mysql 自动管理内存_MySQL内存管理,内存分配器和操作系统
- 测量功率MOS,IGBT动态特性的双脉冲方法
- Java记录 -22- Java的基类Object详解
- android 入门-Android Permission denied(不允许连接Socket) 错误
- 安装redis,执行make test时遇到You need tcl 8.5 or newer in order to run the Redis test
- Python str字符串常用到的函数
- matlab打开时总闪一下才打开_大家装窗帘轨道时,是不是多数都是下面这样的: 打开网易新闻 查看更多图片 或者做个窗帘盒,遮盖一下?...
- GITC 2014全球互联网技术大会正式开始
- 推荐几个清华和交大学霸公众号,值得学习
- 温故知新----css布局
- python — Auto_QQ连连看
- 11.抓取JavaScript
- kaldi_源码笔记 thchs-30_data_prep
- php网站视频播放外链,视频直接上传到七牛上,在浏览器中输入外链为什么不能直接播放?...
- AngularJS初识
- window media player 内部应用程序出错
- IOS获取农历节日.节气
- 笔记本电脑无法连上WiFi的解决办法
- 手把手教你创建第一个Vivado工程
- Qt如何支持高分辨率屏幕(高分屏)
热门文章
- 苏宁大数据怎么运营_苏宁云商“三驾马车”:大数据、大物流、大金融并行
- 基于MAX7800羽毛板语音控制ESP8266小车
- python中permute_PyTorch中permute的用法详解
- 计算机病毒都破坏什么症状,电脑中病毒有什么现象?会不会毁坏硬件?
- linux xen 内核,Xen 正式进入 Linux 内核
- 北京房价降了 北京开发商终于松口
- “职教高考”究竟是什么样的高考?
- 用python实现PCA降维
- 手机客户端(EZview/智U)播放视频时会自动暂停,如何解决
- postman代码生成