Android开发准确获取手机IP地址的两种方式
最近看了好多网上获取IP地址的例子,发现好多都不完全准确,这里我写一下获取ip地址的两种方式。
比如微信支付,后台在做接口的时候,要求App端传入IP地址,我们需要判断是网络环境,WI-FI还是3G,所以需要获取这两种环境的ip地址。
第一步:首先是判断网络环境:
Stringip; ConnectivityManagerconMann=(ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfomobileNetworkInfo=conMann.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); NetworkInfowifiNetworkInfo=conMann.getNetworkInfo(ConnectivityManager.TYPE_WIFI); if(mobileNetworkInfo.isConnected()){ ip=getLocalIpAddress(); System.out.println("本地ip-----"+ip); }elseif(wifiNetworkInfo.isConnected()) { WifiManagerwifiManager=(WifiManager)getSystemService(Context.WIFI_SERVICE); WifiInfowifiInfo=wifiManager.getConnectionInfo(); intipAddress=wifiInfo.getIpAddress(); ip=intToIp(ipAddress); System.out.println("wifi_ip地址为------"+ip); }
如果连接的是移动网络,第二步,获取本地ip地址:getLocalIpAddress();这样获取的是ipv4格式的ip地址。
publicStringgetLocalIpAddress(){ try{ Stringipv4; ArrayListnilist=Collections.list(NetworkInterface.getNetworkInterfaces()); for(NetworkInterfaceni:nilist) { ArrayList ialist=Collections.list(ni.getInetAddresses()); for(InetAddressaddress:ialist){ if(!address.isLoopbackAddress()&&InetAddressUtils.isIPv4Address(ipv4=address.getHostAddress())) { returnipv4; } } } }catch(SocketExceptionex){ Log.e("localip",ex.toString()); } returnnull; }
如果连接的是WI-FI网络,第三步,获取WI-FIip地址:intToIp(ipAddress);
publicstaticStringintToIp(intipInt){ StringBuildersb=newStringBuilder(); sb.append(ipInt&0xFF).append("."); sb.append((ipInt>>8)&0xFF).append("."); sb.append((ipInt>>16)&0xFF).append("."); sb.append((ipInt>>24)&0xFF); returnsb.toString(); }
网上的很多代码获取的是ipv6的本地ip,在微信支付里这种ip地址无法调起微信支付,附代码:
privateStringgetlocalIp(){ Stringip; try{ for(Enumerationen=NetworkInterface.getNetworkInterfaces();en.hasMoreElements();){ NetworkInterfaceintf=en.nextElement(); for(Enumeration enumIpAddr=intf.getInetAddresses();enumIpAddr.hasMoreElements();){ InetAddressinetAddress=enumIpAddr.nextElement(); if(!inetAddress.isLoopbackAddress()&&!inetAddress.isLinkLocalAddress()){ // ip=inetAddress.getHostAddress().toString(); System.out.println("ip=========="+inetAddress.getHostAddress().toString()); returninetAddress.getHostAddress().toString(); } } } }catch(SocketExceptionex){ Log.e("WifiPreferenceIpAddress",ex.toString()); } returnnull; }
本文主要介绍了Android准确获取手机IP地址的两种方式,更多关于Android获取手机IP地址的方式请查看下面的相关链接