Pour détecter les appareils BLE, utilisez le
startScan()
. Cette méthode utilise
ScanCallback
comme paramètre.
Vous devez implémenter ce rappel, car c'est ainsi que les résultats d'analyse sont renvoyés.
Étant donné que l'analyse consomme beaucoup de batterie, vous devez observer les points suivants :
consignes:
- Dès que vous avez trouvé l'appareil souhaité, arrêtez la recherche.
- N'effectuez jamais d'analyse en boucle et définissez toujours une limite de temps pour votre analyse. Un appareil qui était en dehors de la plage, et la poursuite de la recherche vide la batterie.
Dans l'exemple suivant, l'application BLE fournit une activité
(DeviceScanActivity
) pour rechercher les appareils Bluetooth LE et afficher l'écran
dans une liste à l'utilisateur. L'extrait de code suivant montre comment démarrer et arrêter
scan:
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); } }
Pour rechercher uniquement certains types de périphériques, vous pouvez appeler
startScan(List<ScanFilter>, ScanSettings, ScanCallback)
,
en fournissant une liste de ScanFilter
qui limitent les périphériques recherchés par l'analyse
un objet ScanSettings
qui
spécifie les paramètres concernant l'analyse.
L'exemple de code suivant est une implémentation de
ScanCallback
,
qui est l’interface utilisée pour fournir
des résultats d’analyse BLE. Lorsque des résultats sont trouvés,
elles sont ajoutées à un adaptateur de liste dans DeviceScanActivity
pour être affichées sur la
utilisateur.
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(); } };