Android多个同类型的蓝牙设备连接时,有时并不是所有设备都处于工作状态。比如连接两个蓝牙音箱,一个是工作状态,输出音频,另一个是连接状态,并不输出。由于需要我们可能需要获取在工作状态的设备,在Android提供的api层,我暂未找到可以直接获取的api,所以通过如下几种方式间接获取。
1、
CachedBluetoothDevice.java中提供了搜索到的蓝牙设备的相关信息。
public boolean isConnectedA2dpDevice();public boolean isConnectedHfpDevice();public boolean isConnectedHearingAidDevice();
可以根据以上3个函数判断设备是否是连接的a2dpheadsetHearing Aid设备。且CachedBluetoothDevice中保存了以上3种设备是否处于工作状态的标志,以及获取这些标志的函数:
private boolean mIsActiveDeviceA2dp = false; private boolean mIsActiveDeviceHeadset = false; private boolean mIsActiveDeviceHearingAid = false; public boolean isActiveDevice(int bluetoothProfile);
以A2DP device为例,获取active device的方式:
Collection
2、复写onActiveDeviceChanged函数
public BluetoothCallback callback = new BluetoothCallback(){ @Override public void onActiveDeviceChanged(CachedBluetoothDevice activeDevice, int bluetoothProfile) { //记录active device }}
3、反射,比如BluetoothA2dp.java的getActiveDevice函数,由于是hide,不能直接调用,可以使用反射机制实现。
//BluetoothA2dp.java hide functionpublic BluetoothDevice getActiveDevice();