Để tìm thiết bị BLE, bạn sử dụng
startScan()
. Phương thức này lấy một
ScanCallback
làm thông số.
Bạn phải triển khai lệnh gọi lại này vì đó là kết quả quét được trả về.
Vì quá trình quét tốn nhiều pin, bạn nên quan sát những điều sau
nguyên tắc:
- Ngay khi bạn tìm thấy thiết bị mong muốn, hãy ngừng quét.
- Không bao giờ quét theo vòng lặp và luôn đặt giới hạn thời gian cho lần quét. Một thiết bị khả năng truy cập trước đó có thể đã di chuyển ra khỏi phạm vi và đang tiếp tục quét sẽ làm tiêu hao pin.
Trong ví dụ sau, ứng dụng BLE cung cấp một hoạt động
(DeviceScanActivity
) để quét tìm các thiết bị Bluetooth LE và màn hình hiện có
chúng vào danh sách cho người dùng. Đoạn mã sau đây cho biết cách bắt đầu và dừng một
quét:
Kotlin
private val bluetoothLeScanner = bluetoothAdapter.bluetoothLeScanner private var scanning = false private val handler = Handler() // Stops scanning after 10 seconds. private val SCAN_PERIOD: Long = 10000 private fun scanLeDevice() { if (!scanning) { // Stops scanning after a pre-defined scan period. handler.postDelayed({ scanning = false bluetoothLeScanner.stopScan(leScanCallback) }, SCAN_PERIOD) scanning = true bluetoothLeScanner.startScan(leScanCallback) } else { scanning = false bluetoothLeScanner.stopScan(leScanCallback) } }
Java
private BluetoothLeScanner bluetoothLeScanner = bluetoothAdapter.getBluetoothLeScanner(); private boolean scanning; private Handler handler = new Handler(); // Stops scanning after 10 seconds. private static final long SCAN_PERIOD = 10000; private void scanLeDevice() { if (!scanning) { // Stops scanning after a predefined scan period. handler.postDelayed(new Runnable() { @Override public void run() { scanning = false; bluetoothLeScanner.stopScan(leScanCallback); } }, SCAN_PERIOD); scanning = true; bluetoothLeScanner.startScan(leScanCallback); } else { scanning = false; bluetoothLeScanner.stopScan(leScanCallback); } }
Để chỉ quét tìm một số loại thiết bị ngoại vi cụ thể, bạn có thể gọi
startScan(List<ScanFilter>, ScanSettings, ScanCallback)
!
cung cấp một danh sách ScanFilter
các đối tượng này hạn chế thiết bị mà quá trình quét tìm kiếm và
ScanSettings
đối tượng
chỉ định các tham số quét.
Mã mẫu sau đây là cách triển khai
ScanCallback
!
là giao diện dùng để cung cấp kết quả quét BLE. Khi tìm thấy kết quả,
chúng sẽ được thêm vào bộ chuyển đổi danh sách trong DeviceScanActivity
để hiển thị trên
người dùng.
Kotlin
private val leDeviceListAdapter = LeDeviceListAdapter() // Device scan callback. private val leScanCallback: ScanCallback = object : ScanCallback() { override fun onScanResult(callbackType: Int, result: ScanResult) { super.onScanResult(callbackType, result) leDeviceListAdapter.addDevice(result.device) leDeviceListAdapter.notifyDataSetChanged() } }
Java
private LeDeviceListAdapter leDeviceListAdapter = new LeDeviceListAdapter(); // Device scan callback. private ScanCallback leScanCallback = new ScanCallback() { @Override public void onScanResult(int callbackType, ScanResult result) { super.onScanResult(callbackType, result); leDeviceListAdapter.addDevice(result.getDevice()); leDeviceListAdapter.notifyDataSetChanged(); } };