似乎android的java.net.NetworkInterface实现没有 byte [] getHardwareAddress()方法 http://developer.android.com/reference/java/net/NetworkInterface.html
我发现有几个人试图做这个没有明确答案的论坛,我需要得到一个有点跨设备的UUID,所以我不能依赖电话号码或在ANDROID_ID(可以被覆盖,哪个我认为取决于用户拥有谷歌帐户) http://developer.android.com/reference/android/provider/Settings.Secure.html#ANDROID_ID
在linux中,您可以使用ifconfig或从/ proc / net / arp读取,您可以轻松获取硬件地址。
Android中是否有可以阅读的文件?
必须有一种获取此地址的方法,因为它显示在手机的“设置>关于手机>状态”中。
答案 0 :(得分:93)
迟到的答案,但它可以帮助其他人有同样的“问题”。
answer非常直接:
WifiManager wifiMan = (WifiManager) this.getSystemService(
Context.WIFI_SERVICE);
WifiInfo wifiInf = wifiMan.getConnectionInfo();
String macAddr = wifiInf.getMacAddress();
以上代码将为您提供设备的MAC地址,记住在抓取地址时启用wifi。此代码段应在您的活动中使用。
答案 1 :(得分:22)
必须有办法解决这个问题 地址,因为它显示在 “设置>关于手机>状态” 电话。
这意味着,如果不出意外,您可以围绕Android开源代码推特,也许可以使用谷歌代码搜索,找出它从中获取的位置。
我自己做了一些轻击,看来它正在使用getMacAddress()
中的WifiInfo
。
答案 2 :(得分:6)
更新:
从 Android 6.0 开始,上面的API将为您提供所有设备的常量MAC地址,即 02:00:00:00:00:00 。有关详细信息,请参阅以下内容http://developer.android.com/about/versions/marshmallow/android-6.0-changes.html
发现另一篇声称在6.0中找到MAC地址但未经过How to get Wi-Fi Mac address in Android Marshmallow
答案 3 :(得分:0)
添加以下权限。
let center = CGPoint(x: profileImage.bounds.midX, y: profileImage.bounds.midY)
WifiManager在onCreate中初始化。
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
使用以下功能。
WifiManager wifiMgr = (WifiManager) getContext().getSystemService(context.WIFI_SERVICE);
答案 4 :(得分:0)
在Android Q上,无法再访问mac地址。
WifiInfo.getMacAddress()
将始终返回02:00:00:00:00:00
。
并且WifiConfiguration.getRandomizedMacAddress()
将不再可用。
答案 5 :(得分:0)
这是我的代码,在 android 5 + 中运行良好。
public static String getMacAddress() {
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 "";
}