You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

非Google Play发布的Android Pie+设备获取真实蓝牙MAC地址方法咨询

解答:Android Pie+ 设备获取真实蓝牙MAC地址的问题

核心背景

从 Android 9(Pie)开始,Google 引入了隐私保护限制,普通权限的应用无法直接获取真实的蓝牙MAC地址:

  • BluetoothAdapter.getAddress() 会返回固定的虚假地址(如 02:00:00:00:00:00)
  • 通过 Settings.Secure.getString(..., "bluetooth_address") 会返回 null

权限相关说明

你目前仅申请了 ACCESS_FINE_LOCATION 运行时权限,但在 Pie+ 版本中,这个权限已经不足以获取真实蓝牙MAC。之前在 Oreo 及以下生效的权限有特殊限制:

  • LOCAL_MAC_ADDRESS 和 READ_PRIVILEGED_PHONE_STATE 属于系统级特权权限,普通应用(即使是个人测试)如果没有系统签名或者设备Root权限,无法通过常规方式申请并使用这些权限。
  • BLUETOOTH 和 BLUETOOTH_ADMIN 权限在 Pie+ 仍需声明,但仅能用于蓝牙功能操作,无法获取MAC地址。

Pie/Android 10 设备获取真实蓝牙MAC的可行方案(仅用于个人测试)

因为你明确是个人设备测试,不考虑Google Play上架,以下几种方式可行:

1. 设备Root后读取系统文件

Root后的设备可以直接读取蓝牙MAC地址的系统存储文件,代码示例:

public String getRealBluetoothMac() {
    try {
        File file = new File("/sys/class/bluetooth/hci0/address");
        if (file.exists()) {
            BufferedReader br = new BufferedReader(new FileReader(file));
            String mac = br.readLine().trim();
            br.close();
            return mac;
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}

注意:不同设备的蓝牙接口可能不是 hci0,如果读取失败,可以尝试 hci1 等其他编号。

2. 作为系统应用(需系统签名)

如果你的应用能获得设备厂商的系统签名,成为系统应用后,之前在Oreo及以下使用的方法(Settings.Secure.getString(..., "bluetooth_address") 或 BluetoothAdapter.getAddress())会恢复生效,同时需要声明 LOCAL_MAC_ADDRESS 和 READ_PRIVILEGED_PHONE_STATE 权限。

3. 通过ADB命令获取(非代码方式)

如果只是个人测试,也可以直接通过ADB命令查看真实蓝牙MAC:

adb shell cat /sys/class/bluetooth/hci0/address

总结:普通无Root/无系统签名的应用在Pie+上无法获取真实蓝牙MAC,只有通过Root或系统应用的方式才能实现你的需求。

内容的提问来源于stack exchange,提问作者Mena

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 11:17:42