无论如何从支持配置文件(HDD,Spp和音频)获取连接的设备列表。要求就像我的设备将支持HDD,SPP和音频,所以我必须过滤支持所有这些配置文件的设备。无论如何都要过滤设备吗?
答案 0 :(得分:3)
是的,但您的Android应用程序必须以SDK 11或更高版本(Android 3.0.X)为目标。
您的问题的解决方案是您必须查询Android设备已知的所有BluetoothDevices。 已知是指所有已配对的已连接或未连接设备以及未配对的已连接设备。
我们稍后会过滤掉未连接的设备,因为您只需要当前连接的设备。
BluetoothAdapter
:最终的BluetoothAdapter btAdapter = BluetoothAdapter.getDefaultAdapter();
if(btAdapter!= null&& btAdapter.isEnabled())// null表示否 蓝牙!
如果未关闭蓝牙,您可以使用文档中不推荐的btAdapter.enable()
或要求用户执行此操作:Programmatically enabling bluetooth on Android
final int [] states = new int [] {BluetoothProfile.STATE_CONNECTED, BluetoothProfile.STATE_CONNECTING};
第四,你创建了一个BluetoothProfile.ServiceListener
包含连接服务时触发的两个回调
断开连接:
final BluetoothProfile.ServiceListener listener = new BluetoothProfile.ServiceListener() {
@Override
public void onServiceConnected(int profile, BluetoothProfile proxy) {
}
@Override
public void onServiceDisconnected(int profile) {
}
};
现在,由于您必须重复Android SDK(A2Dp, GATT, GATT_SERVER, Handset, Health, SAP)中所有可用蓝牙配置文件的查询过程,您应该按照以下步骤操作:
在onServiceConnected
中,放置一个检查当前配置文件的条件,以便我们将找到的设备添加到正确的集合中,然后使用:proxy.getDevicesMatchingConnectionStates(states)
过滤掉未连接的设备:
switch (profile) {
case BluetoothProfile.A2DP:
ad2dpDevices.addAll(proxy.getDevicesMatchingConnectionStates(states));
break;
case BluetoothProfile.GATT: // NOTE ! Requires SDK 18 !
gattDevices.addAll(proxy.getDevicesMatchingConnectionStates(states));
break;
case BluetoothProfile.GATT_SERVER: // NOTE ! Requires SDK 18 !
gattServerDevices.addAll(proxy.getDevicesMatchingConnectionStates(states));
break;
case BluetoothProfile.HEADSET:
headsetDevices.addAll(proxy.getDevicesMatchingConnectionStates(states));
break;
case BluetoothProfile.HEALTH: // NOTE ! Requires SDK 14 !
healthDevices.addAll(proxy.getDevicesMatchingConnectionStates(states));
break;
case BluetoothProfile.SAP: // NOTE ! Requires SDK 23 !
sapDevices.addAll(proxy.getDevicesMatchingConnectionStates(states));
break;
}
最后,最后要做的是启动查询过程:
btAdapter.getProfileProxy(yourContext, listener, BluetoothProfile.A2DP);
btAdapter.getProfileProxy(yourContext, listener, BluetoothProfile.GATT); // NOTE ! Requires SDK 18 !
btAdapter.getProfileProxy(yourContext, listener, BluetoothProfile.GATT_SERVER); // NOTE ! Requires SDK 18 !
btAdapter.getProfileProxy(yourContext, listener, BluetoothProfile.HEADSET);
btAdapter.getProfileProxy(yourContext, listener, BluetoothProfile.HEALTH); // NOTE ! Requires SDK 14 !
btAdapter.getProfileProxy(yourContext, listener, BluetoothProfile.SAP); // NOTE ! Requires SDK 23 !