Итак, у меня есть класс приемника широковещания для событий 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. Это никогда не срабатывает.