Para encontrar dispositivos BLE, use o
startScan()
. Esse método recebe uma
ScanCallback
como parâmetro.
Por essa ser a forma de retornar os resultados da verificação, será necessário implementar esse callback.
Como a verificação consome muita bateria, observe o seguinte
diretrizes:
- Assim que encontrar o dispositivo desejado, interrompa a verificação.
- Nunca faça uma varredura em repetição e sempre defina um limite de tempo para ela. Um dispositivo que que estavam disponíveis anteriormente podem ter sido movidos para fora do intervalo, e a verificação continua descarrega a bateria.
No exemplo a seguir, o app BLE fornece uma atividade
(DeviceScanActivity
) para procurar dispositivos e telas Bluetooth LE disponíveis
em uma lista para o usuário. O snippet a seguir mostra como iniciar e interromper
digitalizar:
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); } }
Para procurar apenas tipos específicos de periféricos, você pode chamar
startScan(List<ScanFilter>, ScanSettings, ScanCallback)
,
fornecendo uma lista de ScanFilter
objetos que restringem os dispositivos que a verificação procura e uma
objeto ScanSettings
que
especifica parâmetros sobre a verificação.
O exemplo de código a seguir é uma implementação
ScanCallback
,
que é a interface usada para entregar os resultados da verificação de BLE. Quando os resultados são encontrados,
elas são adicionadas a um adaptador de lista na DeviceScanActivity
para serem mostradas ao
usuário.
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(); } };