2

我正在编写一个通过 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);

有更好的方法吗?

4

3 回答 3

1

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

FireFly-XXXX

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

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

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

于 2011-08-16T20:05:08.360 回答
0

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

于 2011-07-06T16:56:07.117 回答
0

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

BluetoothClass.getMajorDeviceClass() 将大致告诉您它是什么类型的设备 - 电话、计算机、音频或视频设备或其他任何设备。BluetoothClass.hasService() 进一步指定了设备的一些功能。

在每个主要类中,定义了一些次要类-它是哪种计算机/音频视频设备/电话/健康设备等。

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

于 2012-06-18T10:24:25.963 回答