Android蓝牙广播接收器未收到事件

时间:2020-03-04 17:54:50

标签: android 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已正确调用,我具有位置许可,已启用蓝牙,并且启动发现请求返回true。我在清单文件中还具有蓝牙管理员和常规蓝牙权限。

我没有得到的是onRecieve方法中的任何东西。永远不会触发。

0 个答案:

没有答案