Android上蓝牙扫描和发现的差异

时间:2015-05-13 10:02:51

标签: android android-bluetooth

Android中定义了两种方法来查找蓝牙设备。 1.使用bluetoothAdapter.startScan 2. bluetoothAdapter.discover

哪种方法更好。

第二个问题, 在onLeScan回调中,如何检查扫描是否已停止。

3 个答案:

答案 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);

您应该在开始发现之前注册此广播接收器