Android 4.0 获取Ipv4、Ipv6、MAC地址

stormwy:这篇文章是整合版本,感谢原作者。


首先是第一篇文章,在android 4.0中获取IPV6地址和MAC地址,然后是第二篇文章,

获取IPV4地址。


1、

原文地址:http://blog.csdn.net/webdisk008/article/details/6294783


 这个方法在摩托罗拉里程碑上测试通过。功能是获取本机的IP和MAC地址。首先新建一个工程,修改AndroidManifest.xml文件增加用户权限,如下。

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>  
<uses-permission android:name="android.permission.INTERNET"></uses-permission>  
 然后修改/res/layout/main.xml,如下。
<TextView    
    android:id ="@+id/hello"  
    android:layout_width="fill_parent"   
    android:layout_height="wrap_content"  
    />  
代码如下(GetIPMAC.java):

package exp.getipmac;  
import java.net.InetAddress;  
import java.net.NetworkInterface;  
import java.net.SocketException;  
import java.util.Enumeration;  
import android.app.Activity;  
import android.content.Context;  
import android.net.wifi.WifiInfo;  
import android.net.wifi.WifiManager;  
import android.os.Bundle;  
import android.util.Log;  
import android.widget.TextView;  
public class GetIPMAC extends Activity {  
    public static String hostip;             //本机IP  
    public static String hostmac;            //本机MAC  
      
    /** Called when the activity is first created. */  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
        TextView tv= (TextView)findViewById(R.id.hello);  
          
        hostip = getLocalIpAddress();  //获取本机IP  
        hostmac = getLocalMacAddress();//获取本机MAC  
        /* 显示本机IP和MAC */  
        tv.setText("HostIP:" + hostip + "/nHostMAC:" + hostmac);  
        /* 在调试信息中输出本机IP和MAC */  
        if (hostip != null) Log.d("GetIPMAC", hostip);  
        else Log.d("GetIPMAC", "null");  
        Log.d("GetIPMAC", hostmac);  
    }  
      
    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) {  
            Log.e("WifiPreference IpAddress", ex.toString());  
        }  
        return null;  
    }  
      
    public String getLocalMacAddress() {  
        WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);  
        WifiInfo info = wifi.getConnectionInfo();  
        return info.getMacAddress();  
    }  
}  

程序运行效果:

Android 4.0 获取Ipv4、Ipv6、MAC地址_第1张图片


不过,我在android 4.0上面的机器运行时,发现按照上文得到的地址是Ipv6的地址,而不是Ipv4的地址。在下面的这篇文章中,给出了解决办法:


2、

http://www.cnblogs.com/lijunamneg/archive/2013/03/04/2943146.html

就是在内部加入一句话:

!inetAddress.isLinkLocalAddress()

修正后的代码如下:

//获取本地IP
     public static 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() && !inetAddress.isLinkLocalAddress()) {  
                                return inetAddress.getHostAddress().toString();  
                                }  
                           }  
                        }  
                    } catch (SocketException ex) {  
                        Log.e("WifiPreference IpAddress", ex.toString());  
                    }  
            
            
                 return null;  
    } 

经过测试,按照上面的方法,在android 4.0,是可以得到Ipv4的地址的。

你可能感兴趣的:(Android 4.0 获取Ipv4、Ipv6、MAC地址)