以编程方式在Android Nougat和O中获取设备mac地址

时间:2017-04-11 06:32:55

标签: android android-7.0-nougat android-settings android-8.0-oreo

我有一个应用程序,它需要设备mac地址。我在Marshmallow及其下方很容易获得mac地址,但问题是android nougat和O.那么如何找到mac。

2 个答案:

答案 0 :(得分:3)

自6.0及更高版本以来已更改:https://developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavior-hardware-id

  

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

     

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

7.0中的行为更改:

  

设备所有者可以访问设备标识符。设备所有者可以访问   使用的设备的Wi-Fi MAC地址   DevicePolicyManagewr.getWifiMacAddress()。如果从未有过Wi-Fi   在设备上启用此方法返回值null。

答案 1 :(得分:1)

一小时后,我刚刚解决了问题......

DeviceAdminReceiver admin = new DeviceAdminReceiver();
DevicePolicyManager devicepolicymanager = admin.getManager(getApplicationContext());
ComponentName name1 = admin.getWho(getApplicationContext());
if (devicepolicymanager.isAdminActive(name1)){
            String mac_address = devicepolicymanager.getWifiMacAddress(name1);
            Log.e("macAddress",""+mac_address);
}

参考文献:

1)Android for Work:https://developer.android.com/about/versions/nougat/android-7.0-changes.html

2)DevicePolicyManger: https://developer.android.com/reference/android/app/admin/DevicePolicyManager.html#getWifiMacAddress(android.content.ComponentName)

3)DeviceAdminReceiver: https://developer.android.com/reference/android/app/admin/DeviceAdminReceiver.html#getWho(android.content.Context)

快乐编码......