打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Android系统下获取本地IP和mac地址的方法

 第一种方法:

(1)设备开通Wifi连接,获取到网卡的MAC地址和IP地址(但是不开通wifi,这种方法获取不到Mac地址,这种方法也是网络上使用的最多的方法)

//根据Wifi信息获取本地Mac

public static voidgetLocalMacAddressFromWifiInfo(Context context)

{

    WifiManagerwifi =(WifiManager)context.getSystemService(Context.WIFI_SERVICE); 

    WifiInfoinfo = wifi.getConnectionInfo(); 

         StringmacAdress = info.getMacAddress(); //获取mac地址

int ipAddress info.getIpAddress();  //获取ip地址   

   String ip intToIp(ipAddress); 

}

public String intToIp(int i) 

         

         return ((i >> 240xFF"." ((i >> 160xFF"." 

+((i >> 8 0xFF"." +( 0xFF   

   

这里需要加入permission

 

<uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/> 

第二种方法:

调用android APINetworkInterface. getHardwareAddress ()
  首先是getLocalIpAddress,获取本地IP地址.

//获取本地IP

public static StringgetLocalIpAddress()

      try

               for (Enumeration en =NetworkInterface 

                               .getNetworkInterfaces(); en.hasMoreElements();)

             

                    NetworkInterface intf =en.nextElement(); 

                    for(Enumeration 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

}

但如果没有红色部分代码。该方法在android2.3, 2.2...较老版本有效,在android较新版本

(例如4.0)获取的数据不正确(我们这里增加了红色部分后,可以支持4.0以上版本)

然后,再根据IP地址获取到MAC地址:

public static StringgetLocalMacAddressFromIp(Context context)

{

    String mac_s="";

    try {

            byte[]mac;

            NetworkInterface ne =

                  NetworkInterface.getByInetAddress(InetAddress.getByName(getLocalIpAddress()));

            mac = ne.getHardwareAddress();

            mac_s =byte2hex(mac);

            }catch (Exception e) {

                         e.printStackTrace();

                        }

        return mac_s;

    }

public static String byte2hex(byte[]b)

{

         StringBuffer hs =newStringBuffer(b.length);

         String stmp ="";

         int len =b.length;

         for (int n = 0; n< len; n++)

    {

             stmp= Integer.toHexString(b[n] &0xFF);

             if(stmp.length() == 1){

                 hs= hs.append("0").append(stmp);

     }else {

                 hs= hs.append(stmp);

                }

         }

         return String.valueOf(hs);

 }

针对获取IP地址的方法,还有一种改进方法,这是是网上运用比较多的,测试表明,该方法获取到了类似fe80::b607:f9ff:fee5:487e..这样的IP地址。注意看这里的IP地址是IPV6的地址形式。所以,一种解决方法是,在上面代码中的最内层的for循环的if语句中对inetAddress进行格式判断,只有其是IPV4格式地址时,才返回值。修改后代码如下:

public String getLocalIpAddress() { 

       try

            String ipv4; 

               List  nilist =Collections.list(NetworkInterface.getNetworkInterfaces()); 

            for (NetworkInterface ni:nilist)  

           

              List  ialist =Collections.list(ni.getInetAddresses()); 

              for (InetAddress address: ialist)

      

                     if (!address.isLoopbackAddress()&&                      

                                  InetAddressUtils.isIPv4Address(ipv4=address.getHostAddress()) 

                    

                       return ipv4; 

                   

               

           

          } catch (SocketException ex) { 

           Log.e(LOG_TAG, ex.toString()); 

       

       return null

   }

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Android获取本机Mac地址及IP地址方法
Android获取IP地址的两种方式(准确版)
android手机两种方式获取IP地址
Java 获取手机/平板IP地址的方法
java 网络编程 -- IP地址的表示与网络接口信息的获取(InetAddress和NetworkInterface)
使用Java测试网络连通性的几种方法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服