【问题标题】:Get Device mac adress in Android Nougat and O programmatically以编程方式获取Android Nougat和O中的设备mac地址
【发布时间】:2017-04-11 06:32:54
【问题描述】:

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

【问题讨论】:

  • 这是通过编程还是手动查找mac地址?
  • 以编程方式
  • 为什么要投反对票?

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


【解决方案1】:

从 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 值。

【讨论】:

  • 我可以在 6 Marshmallow 中找到 mac,但在 7N 中找不到。
  • 修改了我的答案。现在应该解决了。使用 DevicePolicyManager(是的,上面是带 W 的 DevicePolicyManagerwr)。文档中有错字。
【解决方案2】:

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

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) 设备策略管理器: https://developer.android.com/reference/android/app/admin/DevicePolicyManager.html#getWifiMacAddress(android.content.ComponentName)

3) 设备管理员接收器: https://developer.android.com/reference/android/app/admin/DeviceAdminReceiver.html#getWho(android.content.Context)

快乐编码....

【讨论】:

  • 如果“isAdminActive”为假,这是什么意思?
猜你喜欢
  • 2013-01-27
  • 2012-07-27
  • 1970-01-01
  • 1970-01-01
  • 2012-06-05
  • 2020-05-06
  • 2023-03-27
  • 2011-05-07
  • 1970-01-01
相关资源
最近更新 更多