我有一个应用程序,它需要设备mac地址。我在Marshmallow及其下方很容易获得mac地址,但问题是android nougat和O.那么如何找到mac。
答案 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)
快乐编码......