如何以编程方式查找Android设备的MAC地址

如何以编程方式获取Android设备的Mac ID? 我已经完成了IMIE代码,我知道如何手动检查设备上的Mac ID,但不知道如何编程。

WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); WifiInfo wInfo = wifiManager.getConnectionInfo(); String macAddress = wInfo.getMacAddress(); 

另外,在清单文件中添加下面的权限

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

请参阅Android 6.0更改 。

为了向用户提供更好的数据保护,从本版本开始,Android使用Wi-Fi和蓝牙API删除对设备本地硬件标识符的编程访问。 WifiInfo.getMacAddress()和BluetoothAdapter.getAddress()方法现在返回一个常数值02:00:00:00:00:00。

要通过蓝牙和Wi-Fi扫描访问附近外部设备的硬件标识符,您的应用必须具有ACCESS_FINE_LOCATION或ACCESS_COARSE_LOCATION权限。

看到这个post我已经提交了Utils.java示例来提供纯java实现,并且在没有WifiManager的情况下工作。 有些android设备可能没有wifi可用或正在使用以太网接线。

 Utils.getMACAddress("wlan0"); Utils.getMACAddress("eth0"); Utils.getIPAddress(true); // IPv4 Utils.getIPAddress(false); // IPv6 

有了这个代码,你也可以在Android 6.0中获得MacAddress

 public static String getMacAddr() { try { List<NetworkInterface> all = Collections.list(NetworkInterface.getNetworkInterfaces()); for (NetworkInterface nif : all) { if (!nif.getName().equalsIgnoreCase("wlan0")) continue; byte[] macBytes = nif.getHardwareAddress(); if (macBytes == null) { return ""; } StringBuilder res1 = new StringBuilder(); for (byte b : macBytes) { //res1.append(Integer.toHexString(b & 0xFF) + ":"); res1.append(String.format("%02X:",b)); } if (res1.length() > 0) { res1.deleteCharAt(res1.length() - 1); } return res1.toString(); } } catch (Exception ex) { } return "02:00:00:00:00:00"; } 

它正在工作

  package com.keshav.fetchmacaddress; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.net.UnknownHostException; import java.util.Collections; import java.util.List; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.e("keshav","getMacAddr -> " +getMacAddr()); } public static String getMacAddr() { try { List<NetworkInterface> all = Collections.list(NetworkInterface.getNetworkInterfaces()); for (NetworkInterface nif : all) { if (!nif.getName().equalsIgnoreCase("wlan0")) continue; byte[] macBytes = nif.getHardwareAddress(); if (macBytes == null) { return ""; } StringBuilder res1 = new StringBuilder(); for (byte b : macBytes) { // res1.append(Integer.toHexString(b & 0xFF) + ":"); res1.append(String.format("%02X:",b)); } if (res1.length() > 0) { res1.deleteCharAt(res1.length() - 1); } return res1.toString(); } } catch (Exception ex) { //handle exception } return ""; } } 

更新1

这个答案得到了一个错误,一个hexforms的字节得到一个数字,不会出现在它之前的“0”。 res1的附加内容已经被修改,以处理它。

  StringBuilder res1 = new StringBuilder(); for (byte b : macBytes) { // res1.append(Integer.toHexString(b & 0xFF) + ":"); res1.append(String.format("%02X:",b)); }