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

Android上蓝牙扫描和发现的差异,android,android-bluetooth,Android,Android Bluetooth,Android中定义了两种查找蓝牙设备的方法。 1.使用bluetoothAdapter.startScan 2.bluetoothAdapter.discover 哪种方法更好 第二项问题, 在onLeScan回调中,如何检查扫描是否已停止。startScan()将扫描LE设备,而startDiscovery()将扫描普通蓝牙设备 据我所知,只要调用方法stopLeScan()或stopScan()或stopScan(),您就必须调用它们。我个人使用BluetoothAdapter的start

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

哪种方法更好

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

startScan()
将扫描LE设备,而
startDiscovery()将扫描普通蓝牙设备


据我所知,只要调用方法
stopLeScan()
stopScan()
stopScan()
,您就必须调用它们。

我个人使用BluetoothAdapter的startDiscovery()方法,我使用广播接收器来知道我是否有扫描结果,扫描是否停止等等

广播接收机:

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

您应该先注册此广播接收器,然后再开始发现

这些方法适用于不同版本的蓝牙。使用哪一种取决于你有什么样的设备

经典蓝牙使用
BluetoothAdapter.startDiscovery()
查找可发现的设备

蓝牙低能耗支持是在API级别18中添加的,它使用
BluetoothAdapter.starteScan(ScanCallback)
。从API级别21起,这将被BluetoothLeScanner.startScan()取代。

请参阅有关如何扫描LE设备的信息。在
onLeScan
中,如果找到设备,只需调用
scanlevice(false)


onLeScan回调不会检查扫描是否已停止。您必须自己发出
stopLeScan()
命令。

您好,谢谢您的回复。我的第二个问题是,如果从onStartScan或onStopScan调用了方法,如何只签入一个回调。我还有一个问题,我只有一个蓝牙设备,但在开始扫描后,会调用多次仅限时间扫描,并给出相同的设备结果。如果您能为onLeScan方法、startScan和stopScan提供一些代码片段,这将非常有用。没错。如果找到了正确的设备,可以签入onLeScan回调,然后可以停止扫描,只需调用adapter.stopLeScan()。我将在回复中添加到示例代码的链接。