现在,当针对 Android 12 或更高版本时,需要在运行时检查
BLUETOOTH_CONNECT
权限(请参阅此处)。
我的应用程序仅使用蓝牙连接到当前连接的耳机(在 WebRTC 电话会议期间将音频重定向到蓝牙耳机)。因此,如果用户不使用任何蓝牙耳机,我不需要请求许可。
我知道如何请求权限,但是问题是要检查耳机是否已连接,我首先需要请求权限。 但如果没有连接耳机,我不想请求许可。
据我了解,如果我按照建议请求许可,那么所有用户都会被要求授予许可,即使他们在我的游戏中不使用蓝牙耳机。这是向用户请求的不必要的许可,他们不会为此感谢我们。
但是,如果不先检查许可,则无法检查耳机的状态(连接或未连接)。如何解决第22条陷阱?
这是我检查蓝牙耳机是否已连接的代码:
private static boolean isBluetoothHeadsetConnected() {
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
return mBluetoothAdapter != null && mBluetoothAdapter.isEnabled()
&& mBluetoothAdapter.getProfileConnectionState(BluetoothHeadset.HEADSET) == BluetoothHeadset.STATE_CONNECTED;
}
您可以使用 AudioManager 类来检查设备当前的音频输出。
您可以调用 getDevices() 方法并接收 AudioDeviceInfo 对象数组。
在其中
AudioDeviceInfo
,您将获得有关所连接设备的所有信息。
您可以使用 AudioManager 类并像这样获取回调
audioManager.registerAudioDeviceCallback(object : AudioDeviceCallback() {
override fun onAudioDevicesAdded(addedDevices: Array<out AudioDeviceInfo>?) {
viewModel.updateBluetoothState(videoCallManager.isBluetoothConnected())
}
override fun onAudioDevicesRemoved(removedDevices: Array<out AudioDeviceInfo>?) {
viewModel.updateBluetoothState(videoCallManager.isBluetoothConnected())
}
}, null)