STATE_CONNECTED并不意味着它真的连接了吗?

问题描述

如果我们看看this,它说:

仅Android 支持一个已连接的蓝牙耳机 时间

还有getConnectedDevices()的说明:

返回状态为STATE_CONNECTED的设备集

该方法的返回类型为List<BluetoothDevice>,在我的情况下它返回多个。 一种用于Galaxy Watch,一种用于Galaxy Buds。

我知道该如何判断当前哪个人在活动。 当前使用的那个将在调用BluetoothHeadset.isAudioConnected()时返回true。 因此,我在这里不问如何找到活动的蓝牙耳机设备。 我是想了解STATE_CONNECTED的真正含义。

我认为这对其他人也很有用,因为有许多类似以下的答案,在某些情况下无法按预期进行:

public static boolean isConnected() {
    BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    return  bluetoothAdapter != null
        && bluetoothAdapter.isEnabled()
        && bluetoothAdapter.getProfileConnectionState(BluetoothProfile.HEADSET) == BluetoothProfile.STATE_CONNECTED;
}

如果您只想检查用户是否在通话,则此方法不合适。 这是因为打开蓝牙耳机并与智能手机同步后,用户的蓝牙耳机将立即变为STATE_CONNECTED

那么STATE_CONNECTED到底是什么?

解决方法

根据文档,bluetoothAdapter.getProfileConnectionState(BluetoothProfile.HEADSET)返回BluetoothProfile.HEADSET配置文件的当前连接状态。

如果手机的蓝牙适配器当前已连接到具有耳机配置文件的设备,则此呼叫返回BluetoothProfile.STATE_CONNECTED

这并不意味着用户当前正在使用耳机进行通话。这意味着耳机已准备就绪,可以处理与手机的通信。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...