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

Ome*_*mer 5 android bluetooth-lowenergy

我正在使用此示例代码对Android的蓝牙LE功能进行一些简单的扫描+广告测试

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

在代码中:

在此输入图像描述

在设备上:

在此输入图像描述

有趣的是它不会发生反过来.(从Nexus 9发现时,三星总是拥有相同的地址)

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

You*_*eed 10

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

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

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

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

你可以在这里找到类似的问题: -

由于棉花糖使用BluetoothAdapter.getDefaultAdapter()更新蓝牙发现.startDiscovery(); 被打破

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

  • 感谢您的详细回复.所以我的第二个问题的答案是,除非设备向我发送某种标识符,否则无法对设备进行两次识别?如果是这样,每次我在寻找具有相同服务的特定设备时都要连接到设备,这听起来很奇怪. (5认同)