Android中定义了两种方法来查找蓝牙设备。 1.使用bluetoothAdapter.startScan 2. bluetoothAdapter.discover
哪种方法更好。
第二个问题, 在onLeScan回调中,如何检查扫描是否已停止。
答案 0 :(得分:6)
这些方法适用于不同版本的蓝牙。使用哪一个取决于您拥有的设备类型。
经典蓝牙使用BluetoothAdapter.startDiscovery()
查找可被发现的设备。
在API级别18中添加了Bluetooth Low Energy支持,它使用BluetoothAdapter.startLeScan(ScanCallback)
。从API级别21开始,它将替换为BluetoothLeScanner.startScan()
。
有关如何扫描LE设备的信息,请参阅this samplecode。在onLeScan
中,如果您发现设备只是致电scanLeDevice(false);
。
onLeScan回调不会检查扫描是否已停止。您必须自己提供stopLeScan()
命令。
答案 1 :(得分:1)
startScan()
将扫描LE设备,startDiscovery()
用于正常的蓝牙设备。
据我所知,startLeScan()
或startScan()
会在方法stopLeScan()
或stopScan()
被调用时进行扫描,您必须调用它们。
答案 2 :(得分:0)
我个人使用BluetoothAdapter的startDiscovery()方法,我使用广播接收器知道我是否有扫描结果,扫描停止等等。
BroadcastReceiver:
BroadcastReceiver scanReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equalsIgnoreCase( BluetoothDevice.ACTION_FOUND)) {
// device found
} else if (action.equalsIgnoreCase(
BluetoothAdapter.ACTION_DISCOVERY_FINISHED)) {
// discoveryFinished
} else if (action.equalsIgnoreCase(
BluetoothAdapter.ACTION_DISCOVERY_STARTED)) {
// discoveryStarted
}
}
};
IntentFilter filter = new IntentFilter();
filter.addAction(BluetoothDevice.ACTION_FOUND);
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
activity.registerReceiver(scanReceiver, filter);
您应该在开始发现之前注册此广播接收器