所以我有一个用于蓝牙事件的广播接收器类
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方法中的任何东西。永远不会触发。