Сканирование BLE не находит устройство во время второго сканирования - PullRequest
0 голосов
/ 10 апреля 2020

Я внедряю приложение 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()
    }
}

1 Ответ

0 голосов
/ 10 апреля 2020

Похоже, вы не очищаете btDevicesList между двумя сканированиями. Поэтому устройство игнорируется второй раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...