Я внедряю приложение BLE, и в первый раз мое сканирование работает нормально. Я нахожу устройство, делаю операцию записи и отключаюсь. Затем во второй раз, когда я пытаюсь найти устройство, мое сканирование не возвращает устройство, и я не могу найти проблему. Вот мой код:
Операция сканирования:
fun scanForBluetoothLamps(bluetoothAdapter: BluetoothAdapter, scanCallback: ScanCallback) {
val uuid = ParcelUuid(convertIntegerToUUID(LIGHT_SERVICE))
val filter = ScanFilter.Builder().setServiceUuid(uuid).build()
val settings = ScanSettings.Builder().setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY).setCallbackType(ScanSettings.CALLBACK_TYPE_ALL_MATCHES)
.setMatchMode(ScanSettings.MATCH_MODE_AGGRESSIVE).build()
bluetoothAdapter.bluetoothLeScanner.startScan(listOf(filter), settings, scanCallback)
Handler().postDelayed({
bluetoothAdapter.bluetoothLeScanner.stopScan(scanCallback)
_event.postValue(false)
}, SCAN_TIME)
}
Я называю операцию операцией:
private val scanOperation = ScanOperation()
fun setupAdapter(){
scanButton.setOnClickListener{
scanOperation.scanForBluetoothLamps(bluetoothAdapter, viewModel.scanCallback)
}
}
И в ViewModel у меня есть scanCallback:
val scanCallback = object : ScanCallback() {
override fun onScanResult(callbackType: Int, result: ScanResult?) {
result?.let {
if (!btDevicesList.contains(result.device)) {
btDevicesList.add(result.device)
}
}
}
override fun onBatchScanResults(results: MutableList<ScanResult>?) {
results?.forEach { result ->
if (!btDevicesList.contains(result.device)) {
btDevicesList.add(result.device)
}
}
}
}
И это функция отключения, которую я вызываю, прежде чем отключить устройство
fun disconnect(gatt: BluetoothGatt?) {
gatt?.run {
disconnect()
close()
}
}