为什么每次重新启动应用程序时,我的BluetoothDevice地址都会发生变化?

时间:2016-03-23 14:03:40

标签: android bluetooth-lowenergy

我正在使用此sample-code

对Android的蓝牙LE功能进行一些简单的扫描+广告测试

我正在使用Samsung 6和Nexus 9对其进行测试,出于某种原因,如果我让应用程序在Samsung上运行并在Nexus上重新启动应用程序,则下次三星设备找到其他设备时,它有不同的地址。

在代码中:

enter image description here

在设备上:

enter image description here

有趣的是它并没有反过来发生。 (当从Nexus 9中发现时,三星总是拥有相同的地址)

  • 这是设备之间的常见行为吗?
  • 除了它的mac地址之外,还有另一种识别特定设备的方法吗?

1 个答案:

答案 0 :(得分:9)

正如CommonsWare所提到的,从Android 6.0开始,Android已经以编程方式删除了对硬件地址的访问权限,并使其成为扫描设备随机生成的地址。更改日志可在此处找到:

http://developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavior-hardware-id

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

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

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

Since marshmallow update Bluetooth discovery using BluetoothAdapter.getDefaultAdapter().startDiscovery(); is broken

[1] http://blog.bluetooth.com/bluetooth-technology-protecting-your-privacy/