Привет, я совсем новичок в разработке android и использую некоторый нативный код во флаттере. Поэтому я вызвал эту функцию для сканирования устройств Bluetooth в MainActivity.kt.
private fun scanBluetooth(): Set<String> {
var foundDevices = mutableSetOf<String>()
var isFinished = false
val bluetoothAdapter: BluetoothAdapter? = BluetoothAdapter.getDefaultAdapter()
bluetoothAdapter?.startDiscovery()
var filter = IntentFilter(BluetoothDevice.ACTION_FOUND)
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED)
val receiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
val action: String = intent.action
when(action) {
BluetoothDevice.ACTION_FOUND -> {
val device: BluetoothDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE)
val deviceName = device.name
val deviceHardwareAddress = device.address // MAC address
val rssi = intent.getShortExtra(BluetoothDevice.EXTRA_RSSI, Short.MIN_VALUE)
foundDevices.add("${deviceHardwareAddress} ${rssi}")
}
BluetoothAdapter.ACTION_DISCOVERY_FINISHED -> {
isFinished = true;
}
}
}
}
registerReceiver(receiver, filter)
return foundDevices
}
Поэтому я хочу возвращать foundDevices только после завершения BluetoothAdapter.ACTION_DISCOVERY_FINISHED. Можете ли вы предложить способ, как этого добиться?
android Я пробовал что-то подобное, но получаю ошибки.
return when (isFinished) {
true -> {
unregisterReceiver(receiver)
return foundDevices
}
}