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

Mik*_*nov 4 android bluetooth

BLUETOOTH_CONNECT现在,当针对 Android 12 或更高版本时,需要在运行时检查权限(请参阅此处)。

我的应用程序仅使用蓝牙连接到当前连接的耳机(在 WebRTC 电话会议期间将音频重定向到蓝牙耳机)。因此,如果用户不使用任何蓝牙耳机,我不需要请求许可。

我知道如何请求权限,但问题是要检查耳机是否已连接,我首先需要请求权限。但如果没有连接耳机,我不想请求许可。

据我了解,如果我按照建议请求许可,那么所有用户都会被要求获得许可,即使他们在我的游戏中不使用蓝牙耳机。这是向用户请求的不必要的许可,他们不会为此感谢我们。

但如果不先检查许可,就不可能检查耳机的状态(连接或未连接)。如何解决第22条军规?

这是我检查蓝牙耳机是否已连接的代码:

private static boolean isBluetoothHeadsetConnected() {
    BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    return mBluetoothAdapter != null && mBluetoothAdapter.isEnabled()
        && mBluetoothAdapter.getProfileConnectionState(BluetoothHeadset.HEADSET) == BluetoothHeadset.STATE_CONNECTED;
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Dan*_*der 5

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

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

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

  • 一个很好的答案。现在,我可以使用单行方法来代替该方法: `isBluetoothConnected = Arrays.stream(audioManager.getDevices(GET_DEVICES_OUTPUTS)).anyMatch(info -> info.getType() == TYPE_BLUETOOTH_SCO || info.getType() == TYPE_BLUETOOTH_A2DP);` 根本不需要任何权限。 (5认同)