Untuk menemukan perangkat BLE, Anda menggunakan
metode
startScan()
. Metode ini menggunakan
ScanCallback
sebagai parameter.
Anda harus menerapkan callback ini, karena itulah cara hasil pemindaian ditampilkan.
Karena pemindaian intensif baterai, Anda harus mematuhi panduan
berikut:
- Begitu Anda menemukan perangkat yang diinginkan, hentikan pemindaian.
- Jangan pernah memindai secara berulang, dan selalu tetapkan batas waktu pada pemindaian Anda. Perangkat yang sebelumnya tersedia mungkin telah keluar dari jangkauan, dan terus memindai menghabiskan baterai.
Pada contoh berikut, aplikasi BLE menyediakan aktivitas
(DeviceScanActivity
) untuk memindai perangkat Bluetooth LE yang tersedia dan menampilkannya
dalam daftar kepada pengguna. Cuplikan berikut menunjukkan cara memulai dan menghentikan
pemindaian:
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); } }
Untuk memindai jenis periferal tertentu saja, Anda dapat memanggil
startScan(List<ScanFilter>, ScanSettings, ScanCallback)
,
yang memberikan daftar objek ScanFilter
yang membatasi perangkat yang dicari oleh pemindaian dan objek
ScanSettings
yang
menentukan parameter tentang pemindaian.
Contoh kode berikut adalah implementasi
ScanCallback
,
yang merupakan antarmuka yang digunakan untuk memberikan hasil pemindaian BLE. Jika ditemukan,
hasil akan ditambahkan ke adaptor daftar di DeviceScanActivity
untuk ditampilkan kepada
pengguna.
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(); } };