java - Android 上的蓝牙 - 如何连接到正确的蓝牙设备?

标签 java android bluetooth uuid rfcomm

我正在编写一个程序,通过 rfcomm 与外部附件通信。 我的问题是我不知道识别我的设备的正确方法是什么。 我现在的做法是这样的:

Set<BluetoothDevice> pairedDevices = mBluetoothAdapter
                .getBondedDevices();
        for (BluetoothDevice device : pairedDevices) {
            if (device.getName().equals(MY_DEVICE_NAME)) {
                this.myDevice = device;
                break;
            }
        }

然而,这种方法依赖于设备的名称,这对我来说似乎又脏又坏:) 有一个更好的方法吗? 我试着查看 BluetoothDevice 的所有方法但似乎没有任何帮助 - 这个名字真的是最好的方法吗? 我看到在某些地方人们说我应该使用 UUID,但一旦我拥有它,它就被用来打开设备的套接字:

            _socket = myDevice.createRfcommSocketToServiceRecord(MY_UUID);

有更好的方法吗?

最佳答案

同类/功能和/或品牌相同的设备通常具有相似的名称。例如,所有 RN-41 devices from Roving Networks具有以下名称:

FireFly-XXXX

其中 XXXX 是设备地址的最后 4 位数字。这意味着您可以使用以下方法连接到它们中的任何:

        if (device.getName().startsWith("FireFly-")) {
            this.myDevice = device;
            break;
        }

这正是我在我的应用程序中所做的,并且还没有找到任何更可靠/一致的方法来做到这一点。一般来说,如果您感兴趣的设备中的名称比上面的示例更复杂,您应该能够使用常规模式。

关于java - Android 上的蓝牙 - 如何连接到正确的蓝牙设备?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6599788/

相关文章:

java - Spring Boot中读取url编码数据

java - Jackson 条件反序列化

java - GWT AsyncCallback 不填充静态成员

Android资源模块化

android - 白色主题不显示文字

java - Android 与多种设备的兼容性

Android不安全的蓝牙连接

ios - ReadRSSI 不调用委托(delegate)方法

java - QueryDSL 不返回对象

android - 启动时蓝牙连接崩溃