Android上的蓝牙 - 如何连接到CORRECT蓝牙设备?

时间:2011-07-06 16:24:49

标签: 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,但是一旦我拥有UUID就用它来打开设备的插座:

            _socket = myDevice.createRfcommSocketToServiceRecord(MY_UUID);

有更好的方法吗?

3 个答案:

答案 0 :(得分:1)

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

FireFly-XXXX

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

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

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

答案 1 :(得分:0)

您可以使用myDevice.getAddress()获取蓝牙设备地址并进行比较,它始终是唯一的(与名称不同)

答案 2 :(得分:0)

您还可以使用BluetoothDevice.getBluetoothClass()来缩小哪些设备可能相关。

BluetoothClass.getMajorDeviceClass()会告诉你它是什么类型的设备 - 手机,电脑,音频或视频设备,或其他什么。 BluetoothClass.hasService()进一步指定了设备的一些功能。

在每个主要课程中,定义了一些小课程 - 它是什么类型的计算机/音频 - 视频设备/电话/健康设备等。

此外,在最新版本的Android平台(API级别15+)上,您可以查询设备的服务记录,而无需连接到它。请参阅BluetoothDevice.fetchUuidsWithSdp()和BluetoothDevice.getUuids()。