最近看了好多网上获取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地址的两种方式相关推荐

  1. Android获取IP地址的两种方式(准确版)

    原文:https://blog.csdn.net/sinat_16458039/article/details/50260589 最近看了好多网上获取IP地址的例子,发现好多都不完全准确,这里我写一下 ...

  2. C# Windows Phone 8 WP8 开发,取得手机萤幕大小两种方法。

    C# Windows Phone 8 WP8 开发,取得手机萤幕大小两种方法. 原文:C# Windows Phone 8 WP8 开发,取得手机萤幕大小两种方法. 一般我们在开发Windows Ph ...

  3. 获取距离某坐标附近一定范围内的点的两种方式

    获取距离某坐标附近一定范围内的点的两种方式 场景:数据库中有一些点坐标,需要查找出距离当前位置2千米范围内的坐标 方式1:根据两个经纬度计算距离,Oracle/MySql计算地表两点之间的距离: Or ...

  4. 获取Executor提交的并发执行的任务返回结果的两种方式/ExecutorCompletionService使用...

    当我们通过Executor提交一组并发执行的任务,并且希望在每一个任务完成后能立即得到结果,有两种方式可以采取: 方式一: 通过一个list来保存一组future,然后在循环中轮训这组future,直 ...

  5. C++ string获取文件路径文件名、文件路径、文件后缀(两种方式)

    windows路径有两种方式,一种正斜杠,一种反斜杠都可以表示路径,该方法可以支持这两种表达方法 方法一:采用substr()进行分割 string path1 = "D:/datas/Fu ...

  6. Unity编辑器开发——通过模板创建Lua脚本的两种方式(二)

    个人学习笔记,如有错误.疑问.建议,欢迎留言. 本文有关代码转载自:Unity3D 扩展编辑器实现创建Lua脚本 - 知乎 (zhihu.com) 声明:本文转载已取得原文章作者同意,有兴趣的可以关注 ...

  7. Unity编辑器开发——通过模板创建Lua脚本的两种方式(一)

    个人学习笔记,如有错误.疑问.建议,欢迎留言. 声明:本文不得以任何形式进行转载.  前言:在Unity编辑器的Project界面,可以直接右键创建C#脚本,而目前许多游戏公司使用的是tolua.xl ...

  8. Android 获取手机IP地址的两种方式及常见问题

    1.使用WIFI 添加权限 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE">& ...

  9. android 手表打电话,小米高管科普小米手表e-SIM打电话的两种方式

    集微网消息(文/叶子),近日,小米生态链总经理@屈恒_小米在微博上科普,详细介绍了e-SIM.独立号码和一号双终端的问题,我们一起来看一下. 屈恒表示,大家都知道手机能打电话,前提是装了SIM卡,但是 ...

最新文章

  1. mysql 自动管理内存_MySQL内存管理,内存分配器和操作系统
  2. 测量功率MOS,IGBT动态特性的双脉冲方法
  3. Java记录 -22- Java的基类Object详解
  4. android 入门-Android Permission denied(不允许连接Socket) 错误
  5. 安装redis,执行make test时遇到You need tcl 8.5 or newer in order to run the Redis test
  6. Python str字符串常用到的函数
  7. matlab打开时总闪一下才打开_大家装窗帘轨道时,是不是多数都是下面这样的: 打开网易新闻 查看更多图片 或者做个窗帘盒,遮盖一下?...
  8. GITC 2014全球互联网技术大会正式开始
  9. 推荐几个清华和交大学霸公众号,值得学习
  10. 温故知新----css布局
  11. python — Auto_QQ连连看
  12. 11.抓取JavaScript
  13. kaldi_源码笔记 thchs-30_data_prep
  14. php网站视频播放外链,视频直接上传到七牛上,在浏览器中输入外链为什么不能直接播放?...
  15. AngularJS初识
  16. window media player 内部应用程序出错
  17. IOS获取农历节日.节气
  18. 笔记本电脑无法连上WiFi的解决办法
  19. 手把手教你创建第一个Vivado工程
  20. Qt如何支持高分辨率屏幕(高分屏)

热门文章

  1. 苏宁大数据怎么运营_苏宁云商“三驾马车”:大数据、大物流、大金融并行
  2. 基于MAX7800羽毛板语音控制ESP8266小车
  3. python中permute_PyTorch中permute的用法详解
  4. 计算机病毒都破坏什么症状,电脑中病毒有什么现象?会不会毁坏硬件?
  5. linux xen 内核,Xen 正式进入 Linux 内核
  6. 北京房价降了 北京开发商终于松口
  7. “职教高考”究竟是什么样的高考?
  8. 用python实现PCA降维
  9. 手机客户端(EZview/智U)播放视频时会自动暂停,如何解决
  10. postman代码生成