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

获取已连接的蓝牙设备列表

漆雕育
2023-03-14

我是低功耗蓝牙 (LE) API 的新手。有没有办法检查Android设备当前是否连接到任何蓝牙LE设备,并可能获得这些设备的列表?

BT-LE设备真的“连接”了吗?我注意到当我的智能手表与我的Nexus 5配对/连接时,状态栏(在KitKat上)中的蓝牙图标不会像连接到经典蓝牙设备时那样变成白色/粗体。

我在经典设备上使用了下面的代码。看起来我可以用相同的方式检查GATT和GATT_SERVER,但它们总是返回断开连接。

更新:现在我已经将AndroidLollipop闪到了Nexus 5上,我认为这一定是可能的,因为它是用于智能锁的,而且它检测到我的BT-LE Android手表正在连接。

private BluetoothAdapter getBTAdapter() {       
    if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN_MR2)
        return BluetoothAdapter.getDefaultAdapter();
    else {
        BluetoothManager bm = (BluetoothManager) context.getSystemService(Context.BLUETOOTH_SERVICE);
        return bm.getAdapter();
    }
}

public boolean isBluetoothConnected() {
    if(mBluetoothAdapter == null || 
            (mBluetoothAdapter.getProfileConnectionState(BluetoothProfile.HEADSET) == BluetoothProfile.STATE_DISCONNECTED 
                && mBluetoothAdapter.getProfileConnectionState(BluetoothProfile.A2DP) == BluetoothProfile.STATE_DISCONNECTED
                && mBluetoothAdapter.getProfileConnectionState(BluetoothProfile.HEALTH) == BluetoothProfile.STATE_DISCONNECTED)

            ) {

        Utils.logDebug(TAG, "GATT_SERVER " + mBluetoothAdapter.getProfileConnectionState(BluetoothProfile.GATT_SERVER));
        Utils.logDebug(TAG, "GATT " + mBluetoothAdapter.getProfileConnectionState(BluetoothProfile.GATT));
        return false;
    }
    return true;
}

共有2个答案

巩阳秋
2023-03-14

您的BTLE设备可以在系统中使用不同的配置文件进行注册。Android的API仅公开一些配置文件(GATT、GATT_SERVER、耳机等)。但是,它可以在系统中注册为其他配置文件,例如INPUT_DECVICE。调用getConnectedDevices()仅适用于GATT和GATT_SERVER配置文件,但如果您的设备注册为任何其他配置文件,则该方法将不起作用。

莘钧
2023-03-14

您可以使用以下选项:

BluetoothManager bluetoothManager = (BluetoothManager) mContext.getSystemService(Context.BLUETOOTH_SERVICE);
List<BluetoothDevice> devices = bluetoothManager.getConnectedDevices(BluetoothProfile.GATT);
for(BluetoothDevice device : devices) {
  if(device.getType() == BluetoothDevice.DEVICE_TYPE_LE) {
     ...
  }
}

我无法回答您的手表是否实际连接。可能是您的手表只宣传其状态,而手机正在侦听此广告。这取决于它的实现方式。

 类似资料:
  • 连接设备 接口说明 用于连接 扫描出来的蓝牙设备。 参数说明 字段 类型 必须? 说明 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所有已连接蓝牙设备的列表,而不考虑配置文件? 或者,我看到您可以通过BluetoothManager获取特定配置文件的所有连接设备。获取连接的设备。 我想我可以通过ACTION_ACL_CONNECTED/ACTION_ACL_DISCONNECTED监听连接/断开来查看哪些设备连接...似乎容易出错。 但我想知道是否有更简单的方法来获取所有已连接蓝牙设备的列表。

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

  • 连接和断开蓝牙设备在Windows Phone/Desktop 8.1上产生了各种结果。我一直在使用命名空间和我尝试连接具有不同蓝牙版本/类的几个设备。 版本1.2(1级和2级) 每当我尝试连接到2.0或2.1设备时,都会出现问题。第一次尝试连接到每个设备时,一切都会顺利,连接也会打开。当我随后关闭连接并重新连接设备时,问题就开始了。在重新连接期间,连接将永远不会打开,调试器将抛出一个系统。例外:

  • 在这里找到了很多答案之后,我能够在的帮助下构建连接的蓝牙设备列表。现在我的问题是如何知道哪个设备支持哪个配置文件。我希望能够根据配置文件选择设备,例如,获取当前连接的设备及其配置文件的列表,然后选择其中一个。如果我有BluetoothDevice的实例,我看不出如何获得此类信息。 本页中有一些代码说明了如何使用蓝牙耳机模式:http://developer.android.com/guide/to