Я пытаюсь настроить классическую реализацию устройства-компаньона Bluetooth, но служба никогда не вызывается, когда устройство находится в зоне действия или даже подключается или отключается от него.
Вот как работает служба определяется в манифесте, а также в разрешениях
private fun startCompanionAppPair() {
val deviceFilter: BluetoothDeviceFilter = BluetoothDeviceFilter.Builder().build()
val pairingRequest: AssociationRequest = AssociationRequest.Builder()
.addDeviceFilter(deviceFilter)
.build()
deviceManager.associate(
pairingRequest,
object : CompanionDeviceManager.Callback() {
@Deprecated("Deprecated in Java")
override fun onDeviceFound(chooserLauncher: IntentSender) {
startIntentSenderForResult(
chooserLauncher,
SELECT_DEVICE_REQUEST_CODE, null, 0, 0, 0
)
}
override fun onFailure(error: CharSequence?) {
// Handle the failure.
println(error.toString())
}
}, null
)
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
when (requestCode) {
SELECT_DEVICE_REQUEST_CODE -> when (resultCode) {
Activity.RESULT_OK -> {
// The user chose to pair the app with a Bluetooth device.
//val deviceToPair: ScanResult? =
val deviceToPair: BluetoothDevice? = data?.getParcelableExtra(CompanionDeviceManager.EXTRA_DEVICE)
deviceToPair?.let { device ->
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_CONNECT) == PackageManager.PERMISSION_GRANTED) {
device.createBond()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S)
deviceManager.startObservingDevicePresence(device.address)
}
// Continue to interact with the paired device.
}
}
}
else -> super.onActivityResult(requestCode, resultCode, data)
}
}
мне кажется, что здесь чего-то не хватает, что и вызывает проблему. Обратите внимание, что в настоящее время я тестирую Android 12 на устройстве с приложением и устройстве Android 13 в качестве сопутствующего устройства.
Я пытаюсь настроить классическую реализацию устройства-компаньона Bluetooth, но служба никогда не вызывается, когда устройство находится в зоне действия или даже подключается или отключается от него. Вот как работает служба определяется в манифесте, а также в разрешениях [code]
[/code] и класс обслуживания [code]@RequiresApi(Build.VERSION_CODES.S) class MyCompanionService: CompanionDeviceService() {
override fun onRebind(intent: Intent?) { super.onRebind(intent) Log.d("MyCompanionService", "Rebind ${intent.toString()}") }
override fun onCreate() { super.onCreate() Log.d("MyCompanionService", "onCreate") }
override fun onDeviceAppeared(address: String) { super.onDeviceAppeared(address) Log.d("MyCompanionService", "onDeviceAppeared ${address}") }
override fun onDeviceAppeared(associationInfo: AssociationInfo) { super.onDeviceAppeared(associationInfo) Log.d("MyCompanionService", "onDeviceAppeared ${associationInfo}") }
override fun onDeviceDisappeared(associationInfo: AssociationInfo) { super.onDeviceDisappeared(associationInfo) Log.d("MyCompanionService", "onDeviceDisappeared ${associationInfo}") }
override fun onDeviceDisappeared(address: String) { super.onDeviceDisappeared(address) Log.d("MyCompanionService", "onDeviceDisappeared ${address}") }
override fun onDestroy() { super.onDestroy() Log.d("MyCompanionService", "onDestroy") } } [/code] и, согласно сопутствующему диспетчеру устройств, именно так я настраиваю наблюдение за устройством [code]private fun startCompanionAppPair() { val deviceFilter: BluetoothDeviceFilter = BluetoothDeviceFilter.Builder().build()
val pairingRequest: AssociationRequest = AssociationRequest.Builder() .addDeviceFilter(deviceFilter) .build()
override fun onFailure(error: CharSequence?) { // Handle the failure. println(error.toString()) } }, null )
} override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { when (requestCode) { SELECT_DEVICE_REQUEST_CODE -> when (resultCode) { Activity.RESULT_OK -> { // The user chose to pair the app with a Bluetooth device. //val deviceToPair: ScanResult? = val deviceToPair: BluetoothDevice? = data?.getParcelableExtra(CompanionDeviceManager.EXTRA_DEVICE) deviceToPair?.let { device -> if (ActivityCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_CONNECT) == PackageManager.PERMISSION_GRANTED) { device.createBond() if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) deviceManager.startObservingDevicePresence(device.address) } // Continue to interact with the paired device. } } } else -> super.onActivityResult(requestCode, resultCode, data) } } [/code] мне кажется, что здесь чего-то не хватает, что и вызывает проблему. Обратите внимание, что в настоящее время я тестирую Android 12 на устройстве с приложением и устройстве Android 13 в качестве сопутствующего устройства.