Android 为什么每次我重新启动应用程序时,我的蓝牙设备的地址都会改变?

Android 为什么每次我重新启动应用程序时,我的蓝牙设备的地址都会改变?,android,bluetooth-lowenergy,Android,Bluetooth Lowenergy,我正在用这个软件对Android的蓝牙LE功能进行一些简单的扫描+广告测试 我正在使用三星6和Nexus 9进行测试,出于某种原因,如果我让应用程序在三星上运行,然后在Nexus上重新启动应用程序,下次三星设备找到另一台设备时,它会有一个不同的地址 代码: 在设备上: 有趣的是,事情并非相反。(从Nexus 9上发现三星时,其地址始终相同) 这是设备之间的常见行为吗 除了mac地址外,还有其他方法可以识别特定设备吗 正如Commonware所提到的,从Android 6.0开始,Andro

我正在用这个软件对Android的蓝牙LE功能进行一些简单的扫描+广告测试

我正在使用三星6和Nexus 9进行测试,出于某种原因,如果我让应用程序在三星上运行,然后在Nexus上重新启动应用程序,下次三星设备找到另一台设备时,它会有一个不同的地址

代码:

在设备上:

有趣的是,事情并非相反。(从Nexus 9上发现三星时,其地址始终相同)

  • 这是设备之间的常见行为吗
  • 除了mac地址外,还有其他方法可以识别特定设备吗

正如Commonware所提到的,从Android 6.0开始,Android已经通过编程方式删除了对硬件地址的访问,并使其看起来像是随机生成给扫描设备的地址。更改日志可在此处找到:

事实上,扫描设备看到的是随机的蓝牙地址,而不是实际的蓝牙地址,这是一个非常有用的隐私功能。从BTv4.0开始,蓝牙规范就采用了它,称为LE隐私:

“此功能会导致广告数据包中的MAC地址被替换为随机值,该值按制造商确定的时间间隔变化。任何恶意设备”,沿您的旅行路线每隔一段时间放置,将无法确定从您的设备接收到的一系列不同的随机生成的MAC地址实际上与同一物理设备相关。它实际上看起来像一系列不同的设备,因此,无法使用公布的MAC地址跟踪您“[1]

您可以在此处找到类似的问题:-


[1]

Quoting:“当运行Android 6.0(API级别23)的设备启动后台Wi-Fi或蓝牙扫描时,外部设备可以看到该操作源于随机MAC地址。”感谢您的详细回复。所以我的第二个问题的答案是,除非设备向我发送某种标识符,否则无法对设备进行两次标识?如果是这样的话,当我使用相同的服务瞄准特定的设备时,每次我都要连接到一个设备,这听起来很奇怪。很高兴知道,那么,为了改变这种行为,我建议的唯一标识符是什么?我如何配对设备?这种情况现在发生在iPhone上。我正在调试我创建的一个BLE应用程序,发现我的新iPhone 11每隔几分钟就会更改一次MAC地址。现在不知道如何让我家里的BLE信标工作。@CrazyMerlin你在这里得出什么结论了吗?在这种情况下,你的解决方案是什么?我现在在Android 9上遇到了非常类似的问题(即使设备已绑定,mac地址也会时不时地改变!)。想知道我应该探索哪条发展道路:)“通过使BTLE不可用来改善隐私”——干得好,安卓