Android Приемник Bluetooth не получает события - PullRequest
0 голосов
/ 04 марта 2020

Итак, у меня есть класс приемника широковещания для событий Bluetooth

class BluetoothScanManager(val context: Context,
                           private val platformLogger: PlatformLogger): BroadcastReceiver() {
    private val bluetoothAdapter: BluetoothAdapter = BluetoothAdapter.getDefaultAdapter()
    var onDevicesChanged: (() -> Unit)? = null
    var discoveredDevices: MutableSet<BluetoothDevice> = mutableSetOf()

    fun startDiscovery() {

        context.registerReceiver(this, IntentFilter(BluetoothDevice.ACTION_FOUND))
        context.registerReceiver(this, IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_STARTED))
        context.registerReceiver(this, IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED))
        context.registerReceiver(this, IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED))

        val result = context.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION)

        if (result == PackageManager.PERMISSION_DENIED) {
            platformLogger.log(LogLevel.ERROR, "Unable to get location?")
        }

        if (!bluetoothAdapter.isEnabled){
            bluetoothAdapter.enable()
        }
        if (bluetoothAdapter.startDiscovery()){
            platformLogger.log(LogLevel.DEBUGGING, "Started discovery")
        } else {
            platformLogger.log(LogLevel.DEBUGGING, "Failed to start discovery")
        }
    }

    fun stopDiscovery() {
        bluetoothAdapter.cancelDiscovery()
        context.unregisterReceiver(this)
    }

    override fun onReceive(context: Context?, intent: Intent?) {
        platformLogger.log(LogLevel.DEBUGGING, "recived bluetooth event ${intent?.action}")
        when(intent?.action) {
            BluetoothDevice.ACTION_FOUND -> {
                ....
            }
            BluetoothAdapter.ACTION_DISCOVERY_FINISHED -> {
                platformLogger.log(LogLevel.DEBUGGING, "restarting bluetooth")
                bluetoothAdapter.startDiscovery()
            }
            BluetoothAdapter.ACTION_DISCOVERY_STARTED -> platformLogger.log(LogLevel.DEBUGGING, "Starting bluetooth")
        }
    }

} 

Я обнаружил, что startDiscovery вызывается правильно, у меня есть разрешение на местоположение, Bluetooth включен, и запрос на обнаружение запуска возвращает true. У меня также есть администратор Bluetooth и обычные разрешения Bluetooth в файле манифеста.

Я не получаю ничего от метода onRecieve. Это никогда не срабатывает.

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