在使用 startScan() 方法时,需要设置一个 ScanCallback 回调对象,在回调方法 onScanResult() 中处理扫描到的设备信息。如果使用了参数 [service],需要注意该参数必须是一个 Service UUID 的数组,否则可能无法扫描到设备。
以下是一个示例代码,用于扫描 Service UUID 为 "0000180D-0000-1000-8000-00805F9B34FB" 的设备:
private BluetoothLeScanner scanner;
private ScanCallback scanCallback;
private void startScan() {
List filters = new ArrayList<>();
ParcelUuid serviceUuid = ParcelUuid.fromString("0000180D-0000-1000-8000-00805F9B34FB");
ScanFilter filter = new ScanFilter.Builder()
.setServiceUuid(serviceUuid)
.build();
filters.add(filter);
ScanSettings settings = new ScanSettings.Builder()
.setScanMode(ScanSettings.SCAN_MODE_BALANCED)
.build();
scanner = BluetoothAdapter.getDefaultAdapter().getBluetoothLeScanner();
scanCallback = new ScanCallback() {
@Override
public void onScanResult(int callbackType, ScanResult result) {
super.onScanResult(callbackType, result);
// 处理扫描到的设备信息
}
@Override
public void onScanFailed(int errorCode) {
super.onScanFailed(errorCode);
// 处理扫描失败的情况
}
};
scanner.startScan(filters, settings, scanCallback);
}
private void stopScan() {
if (scanner != null) {
scanner.stopScan(scanCallback);
}
}