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

4
现在,当针对 Android 12 或更高版本时,需要在运行时检查 BLUETOOTH_CONNECT 权限(请参见此处)。
我的应用程序只使用蓝牙连接当前连接的耳机(在 WebRTC 电话会议期间将音频重定向到蓝牙耳机)。因此,如果用户不使用任何蓝牙耳机,我不需要请求权限。 我知道如何请求权限,但问题是要检查耳机是否已连接,我首先需要请求权限。但如果没有连接耳机,我就不想请求权限。
据我所知,如果按照建议请求权限,那么即使用户不在我的游戏中使用蓝牙耳机,所有用户也会被要求赋予权限。这是一个不必要的权限请求,用户不会感谢我们。
但是,如果不先检查权限,则无法检查耳机的状态(已连接还是未连接)。如何解决这个困境?
这是我的代码,用于检查蓝牙耳机是否已连接:
private static boolean isBluetoothHeadsetConnected() {
    BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    return mBluetoothAdapter != null && mBluetoothAdapter.isEnabled()
        && mBluetoothAdapter.getProfileConnectionState(BluetoothHeadset.HEADSET) == BluetoothHeadset.STATE_CONNECTED;
}

enter image description here


让用户在第一次积极地表明他们想让你处理蓝牙耳机之前,先让他们做些什么。这可以是点击按钮或设置屏幕中的项目。此时,您可以解释如何使用它(您需要权限,并且将来将尝试自动连接到耳机),然后请求权限,然后尝试使用耳机。 - CommonsWare
1个回答

5
您可以使用AudioManager类来检查设备当前的音频输出。
您可以调用getDevices()方法,并接收一个AudioDeviceInfo对象数组。
在该AudioDeviceInfo中,您将获得有关连接设备的所有信息。

5
一个很好的答案。现在我可以使用一行代码:isBluetoothConnected = Arrays.stream(audioManager.getDevices(GET_DEVICES_OUTPUTS)).anyMatch(info -> info.getType() == TYPE_BLUETOOTH_SCO || info.getType() == TYPE_BLUETOOTH_A2DP); 而且完全不需要权限。 - Mike Keskinov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接