หากต้องการค้นหาอุปกรณ์ BLE ให้ใช้
startScan()
วิธีนี้ต้องใช้
ScanCallback
เป็นพารามิเตอร์
คุณต้องใช้ Callback นี้ เนื่องจากเป็นวิธีแสดงผลลัพธ์การสแกน
เนื่องจากการสแกนจะใช้พลังงานแบตเตอรี่มาก คุณจึงควรสังเกตสิ่งต่อไปนี้
หลักเกณฑ์:
- หยุดสแกนทันทีที่พบอุปกรณ์ที่ต้องการ
- ไม่ต้องสแกนแบบวนซ้ำ และกำหนดขีดจำกัดเวลาในการสแกนเสมอ อุปกรณ์ที่ เคยพร้อมใช้งานก่อนหน้านี้ อาจย้ายออกห่างจากช่วง และสแกนต่อ ทำให้แบตเตอรี่หมดเร็ว
ในตัวอย่างต่อไปนี้ แอป BLE จะแสดงกิจกรรม
(DeviceScanActivity
) เพื่อสแกนหาอุปกรณ์ Bluetooth LE ที่พร้อมใช้งานและจอแสดงผล
อยู่ในรายการให้กับผู้ใช้ ข้อมูลโค้ดต่อไปนี้แสดงวิธีเริ่มและหยุด
สแกน:
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); } }
หากต้องการสแกนหาอุปกรณ์ต่อพ่วงบางประเภทเท่านั้น ให้เรียก
startScan(List<ScanFilter>, ScanSettings, ScanCallback)
มีรายชื่อ ScanFilter
ที่จำกัดอุปกรณ์ที่จะสแกน และ
ScanSettings
ออบเจ็กต์ที่
ระบุพารามิเตอร์เกี่ยวกับการสแกน
ตัวอย่างโค้ดต่อไปนี้เป็นการใช้งาน
ScanCallback
ซึ่งเป็นอินเทอร์เฟซที่ใช้แสดงผลลัพธ์การสแกน BLE เมื่อพบผลลัพธ์
ระบบจะเพิ่มแอตทริบิวต์เหล่านั้นลงในอะแดปเตอร์รายการใน DeviceScanActivity
เพื่อแสดงต่อ
ผู้ใช้
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(); } };