如何在请求许可之前检查蓝牙耳机是否已连接

问题描述 投票:0回答:2

现在,当针对 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;
}

enter image description here

android bluetooth
2个回答
8
投票

您可以使用 AudioManager 类来检查设备当前的音频输出。

您可以调用 getDevices() 方法并接收 AudioDeviceInfo 对象数组。

在其中

AudioDeviceInfo
,您将获得有关所连接设备的所有信息。


0
投票

您可以使用 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)
© www.soinside.com 2019 - 2024. All rights reserved.