通过WifiManager,DhcpInfo获取android IP地址及网关等信息(两种方式)
最近做项目的时候需要获取android设备地址,在网上找到了如下的方式
方式一:
import java.net.InetAddress;import java.net.NetworkInterface;import java.net.SocketException;import java.util.Enumeration;//不适用android较新版本(例如4.0等)public String getLocalIpAddress() { try { for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) { NetworkInterface intf = en.nextElement(); for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) { InetAddress inetAddress = enumIpAddr.nextElement(); if (!inetAddress.isLoopbackAddress()) { return inetAddress.getHostAddress().toString(); } } } } catch (SocketException ex) { System.out.println(ex.toString()); } return null; }
但是经过测试该方法在android2.3, 2.2...较老版本有效,但是在android较新版本(例如4.0等)获取的数据不正确。
方式二: 通过WifiManager, DhcpInfo获取IP地址以及网关等信息(在android4.0等版本也适用)
package com.jason.demo.androidip;import android.content.Context;import android.net.DhcpInfo;import android.net.wifi.WifiInfo;import android.net.wifi.WifiManager;import android.text.format.Formatter;public class IPAddress {public String getIPAddress(Context ctx){WifiManager wifi_service = (WifiManager) ctx.getSystemService(Context.WIFI_SERVICE);DhcpInfo dhcpInfo = wifi_service.getDhcpInfo();WifiInfo wifiinfo = wifi_service.getConnectionInfo();System.out.println("Wifi info----->"+wifiinfo.getIpAddress());System.out.println("DHCP info gateway----->"+Formatter.formatIpAddress(dhcpInfo.gateway));System.out.println("DHCP info netmask----->"+Formatter.formatIpAddress(dhcpInfo.netmask));//DhcpInfo中的ipAddress是一个int型的变量,通过Formatter将其转化为字符串IP地址return Formatter.formatIpAddress(dhcpInfo.ipAddress);}}
加入permission
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>