BluetoothAdapter.startScan() 和 BluetoothAdapter.startLeScan()的区别

8
我的目标是找到附近的蓝牙设备(LE设备和“经典”设备),以便将当前可见附近设备与我的应用程序的某些功能关联起来。(不是特定的设备/设备,而是所有设备!) 我知道:startLeScan()仅回调BLE设备;这两种方法的工作方式不同-当startBLeScan()由我的代码与回调管理时,classic扫描由系统进程管理,并通过广播返回找到的BluetoothDevice
我不确定的是:假设当前设备API级别为18+,startScan()将始终查找可发现的BLE和classic设备;BluetoothDevice.connectGatt()是通过新的BLE API添加的,但也应该适用于经典蓝牙(返回GATT服务...)。
我想知道的是:如果确实startScan()返回两种类型(Classic和BLE),在电池消耗、性能优化、良好实践和其他方面上哪个更好?我的应用程序将定期执行后台扫描,因此我希望尽可能地减少对电池的影响。
2个回答

7

+1,@TalKanel 我会质疑你是否真的需要进行后台扫描,或者你是否可以通过与设备绑定并偶尔尝试连接它来避免进行全面的设备发现。 - Kevin Coppock
@kcoppock:我更新了我的问题。我解释了一下为什么我需要这些定期扫描。 - Tal Kanel
明白了,我猜是位置或者类似的东西。但是没错,@Andrea 的回答是正确的;这两个 API 是完全独立的。 - Kevin Coppock
1
@kcoppock:两个API最终都会返回相同的列表对象类型:BluetoothDevice。当我执行经典蓝牙扫描时,有时也会得到BluetoothDevice,其类型为DEVICE_TYPE_LE。这就是提出问题的动机。 - Tal Kanel
啊,如果是这样的话,那么我对API的理解就错了。我周围没有LE设备可以测试,所以我会留给其他人来回答。 :) - Kevin Coppock

1
我有一款中国市场上的平板电脑,支持BLE,但是每次我调用startLeScan时,它总是返回一个名为“null”的带有BLE设备的设备。通过调用startDiscovery解决了这个问题。请记住,如果您的应用程序目标为23或更高版本,则需要具有位置权限才能使startDiscovery正常工作。希望这可以帮助到你。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接