当前位置: 首页 > 知识库问答 >
问题:

在Android中,如何获取已连接蓝牙设备的配置文件?

皇甫卓君
2023-03-14

在这里找到了很多答案之后,我能够在BroadcastRecencer的帮助下构建连接的蓝牙设备列表。现在我的问题是如何知道哪个设备支持哪个配置文件。我希望能够根据配置文件选择设备,例如,获取当前连接的设备及其配置文件的列表,然后选择其中一个。如果我有BluetoothDevice的实例,我看不出如何获得此类信息。

本页中有一些代码说明了如何使用蓝牙耳机模式:http://developer.android.com/guide/topics/connectivity/bluetooth.html#Profiles.但这并不能解决我的问题。如果你认为我遗漏了什么,请帮我指出。

提前非常感谢。

共有2个答案

高运诚
2023-03-14

查看Android源代码,您可以通过查看其UUID来猜测哪些配置文件可用于设备,然后逐个连接每个配置文件

步骤0:从那里复制常量:https://android.googlesource.com/platform/packages/apps/Settings//9ad703cdb9a8d0972c123b041d18aa7bbeb391a4/src/com/android/settings/bluetooth/LocalBluetoothProfileManager。Java语言

步骤1:获取您的蓝牙设备,例如通过扫描。确保其正确粘合。

第2步:为BluetoothDevice的android.bluetooth.注册一个BroadcastRecencer。ACTION_UUID操作意图

第3步:在您的设备上,调用fetchUuidsSusSdp方法

步骤4:您将接收一个ACTION UUID广播:在onReceive方法中,您可以注销接收器,并获得如下配置文件列表:

ArrayList<Integer> profiles = new ArrayList<>();

ParcelUuid[] uuids = device.getUuids();

if (BluetoothUuid.containsAnyUuid(uuids, HEADSET_PROFILE_UUIDS))
{
    profiles.add(BluetoothProfile.HEADSET);
}

if (BluetoothUuid.containsAnyUuid(uuids, A2DP_PROFILE_UUIDS))
{
    profiles.add(BluetoothProfile.A2DP);
}

if (BluetoothUuid.containsAnyUuid(uuids, OPP_PROFILE_UUIDS))
{
    //OPP doesn't have any BluetoothProfile value
}

if (BluetoothUuid.containsAnyUuid(uuids, HID_PROFILE_UUIDS))
{
    //You will need system privileges in order to use this one
    profiles.add(BluetoothProfile.INPUT_DEVICE);
}

if (BluetoothUuid.containsAnyUuid(uuids, PANU_PROFILE_UUIDS))
{
    profiles.add(BluetoothProfile.PAN);
}

步骤5:逐个获取配置文件的代理:

for (int profile : profiles)
{
    if (!adapter.getProfileProxy(context, listener, profile))
    {
        //Do something
    }
}

步骤6:对侦听器的onServiceConnected方法中检索到的每个代理执行任何操作。您可以使用Relefection访问connect方法。

水睿
2023-03-14

我遇到了同样的问题。您似乎无法从BluetoothDevice类中获取可用的配置文件。但是从BluetoothProfile类中的getDevicesMatchingConnectionState方法获取BluetoothDevices列表还有很长的路要走。

例如,如果您想找到哪些BluetoothDevices支持A2DP,请首先创建一个自定义BluetoothProfile。ServiceListener

public class cServiceListener implements BluetoothProfile.ServiceListener {
private static final int[] states={ BluetoothProfile.STATE_DISCONNECTING,
                                    BluetoothProfile.STATE_DISCONNECTED,
                                    BluetoothProfile.STATE_CONNECTED,
                                    BluetoothProfile.STATE_CONNECTING};
@Override
public void onServiceConnected(int profile, BluetoothProfile bluetoothProfile) {
List<BluetoothDevice> Devices=bluetoothProfile.getDevicesMatchingConnectionStates(states);
    for (BluetoothDevice loop:Devices){
        Log.i("myTag",loop.getName());
    }
}

@Override
public void onServiceDisconnected(int profile) {
}

}

然后将其附加到要检查的配置文件,在此示例中为A2DP

mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
cServiceListener mServiceListener=new cServiceListener();
mBluetoothAdapter.getProfileProxy(thisContext,mServiceListener, BluetoothProfile.A2DP);

这将登录所有支持处于请求状态的A2DP的蓝牙设备。在此示例中,它包括当前连接的所有设备和之前已断开连接的配对设备。

 类似资料:
  • 我正在尝试获取连接到运行Android Oreo的Android手机的设备的名称。 过去两天我一直在寻找答案,但没有一个奏效。建议主要返回错误 问题是,有没有办法进行查询以返回连接的蓝牙设备? 这些是不起作用的链接和建议: IOException:读取失败,套接字可能关闭-Android 4.3上的蓝牙 在Android中,如何获取已连接蓝牙设备的配置文件 列出已连接的蓝牙设备 我可以获得有关设备

  • 我是低功耗蓝牙 (LE) API 的新手。有没有办法检查Android设备当前是否连接到任何蓝牙LE设备,并可能获得这些设备的列表? BT-LE设备真的“连接”了吗?我注意到当我的智能手表与我的Nexus 5配对/连接时,状态栏(在KitKat上)中的蓝牙图标不会像连接到经典蓝牙设备时那样变成白色/粗体。 我在经典设备上使用了下面的代码。看起来我可以用相同的方式检查GATT和GATT_SERVER

  • 我如何获得Android所有已连接蓝牙设备的列表,而不考虑配置文件? 或者,我看到您可以通过BluetoothManager获取特定配置文件的所有连接设备。获取连接的设备。 我想我可以通过ACTION_ACL_CONNECTED/ACTION_ACL_DISCONNECTED监听连接/断开来查看哪些设备连接...似乎容易出错。 但我想知道是否有更简单的方法来获取所有已连接蓝牙设备的列表。

  • 连接设备 接口说明 用于连接 扫描出来的蓝牙设备。 参数说明 字段 类型 必须? 说明 device RKBLEDevice 是 蓝牙设备 示例代码 Swift: RokidMobileSDK.binder.connect(device: RKBLEDevice) Objc: [RokidMobileSDK.binder connect:device]; 断开设备 接口说明 用于断开已经连接的

  • 连接蓝牙设备 接口说明 接口需传入蓝牙名称(蓝牙address重启后会变) 参数说明 字段 类型 必须? 说明 name String 是 设备名称 举个大栗子 RokidMobileSDK.binder.connectBT(name, new IBTConnectCallBack() { @Override public void onConnectSucceed(BTDevic

  • 我想连接第三方蓝牙设备到我的Android Wear手表(三星Gear Live)。我试图找到留档如何做到这一点,但我没有任何运气。所有的搜索,我似乎都认为我想连接到手机上。 有谁知道一个很好的例子来演示如何将蓝牙心率监视器(或其他设备)连接到Android Wear,以便我在手机不存在时保存历史记录?这可能吗?它是否与从手机/平板电脑上执行相同的协议?