通过WifiManager,DhcpInfo获取android IP地址及网关等信息(两种方式)

来源:互联网 发布:韩剧秘密知乎 编辑:程序博客网 时间:2024/05/29 18:38

方式一:

 

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"/>