Как удерживать возврат до DEVICE_DISCOVERY_FINISHED в adnroid - PullRequest
1 голос
/ 10 апреля 2020

Привет, я совсем новичок в разработке 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
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...