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)
{
ArrayListialist=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(EnumerationenumIpAddr=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地址的方式请查看下面的相关链接