BluetoothAdapter.startScan()vs BluetoothAdapter.startLeScan()

时间:2014-02-16 10:26:51

标签: android bluetooth-lowenergy android-bluetooth

我的目标是找到附近的蓝牙设备(LE设备和“经典”),以便将当前可见的附近设备与我的应用程序使用它的某些功能相关联。 (不是特定的设备/设备,但都是!!!)

我所知道的:

  • startLeScan()仅使用BLE设备进行回调
  • 这两种方法以不同的方式工作 - 而startBLeScan()由我的代码管理回调,而经典扫描由系统进程管理,并返回通过广播找到的BluetoothDevice

我不确定的是什么:

  • 假设当前设备API级别为18 + startScan()将始终发现可发现的BLE和经典设备。
  • BluetoothDevice.connectGatt()添加了新的BLE API,但也应该使用经典蓝牙(返回GATT服务......)。

我想知道的事情:

  • 如果startScan()确实返回两​​种类型(Classic和BLE),那么在电池消耗,性能,良好做法和其他方面使用哪种更好?

我的应用程序会定期执行后台扫描,因此我希望尽可能减少对电池消耗的影响。

2 个答案:

答案 0 :(得分:4)

您必须使用Classic Bluetooth开始扫描startDiscovery()设备,并使用Bluetooth LE扫描startLeScan()设备。注意:执行设备发现对于蓝牙适配器来说是一个繁重的过程,并且会占用大量资源。

修改 在Android Nexus 4上使用Android 4.4.2 startDiscovery()找到蓝牙LE设备。 在三星Galaxy S3上使用Android 4.3 startDiscovery()并没有找到蓝牙LE设备。

答案 1 :(得分:1)

我有一个具有BLE支持的场外中文平板电脑,但是,它总是返回配备BLE的设备,其名称为" null"当我打电话给startLeScan时。通过调用startDiscovery解决了该问题。请记住,如果您的应用程序的目标是23或更高,则需要具有startDiscovery的位置权限才能正常工作。希望它有所帮助。