如何从BluetoothSerialPortInfo类获取蓝牙地址的实际格式?

时间:2009-12-16 23:15:29

标签: blackberry bluetooth

我正在使用BluetoothSerialPortInfo类将蓝牙设备与我的黑莓配对。当我尝试打印每个设备的设备地址值时,我看不到或得到实际的蓝牙地址。我使用以下代码。

String btAddress = mPortInfo [count] .getDeviceAddress()。toString();

我实际上从上面的代码中得到了[@ 4d4cd14c。但我的设备的实际蓝牙地址是:00:21:3c:2d:1F:5c。

如果我使用javax.bluetooth,我会得到实际的蓝牙地址。但我想使用BluetoothSerialPortInfo建立与设备的串行连接。所以我想根据蓝牙地址正确识别我的设备,而不使用设备的友好名称。

如何将从getDeviceAddress()方法获取的原始地址转换为实际的蓝牙地址?

谢谢,

2 个答案:

答案 0 :(得分:1)

getDeviceAddress()返回一个字节数组,因此您需要将每个字节转换为十六进制表示形式。如果您使用的是5.0,则可以使用ByteArrayUtilities.byteArrayToHex(),但如果您的操作系统版本较低,则需要编写自己的转换代码。这样的事情应该有效(在另一个SO帖子上找到):

public static String toHexString(byte bytes[]) {
    if (bytes == null) {
        return null;
    }

    StringBuffer sb = new StringBuffer();
    for (int iter = 0; iter < bytes.length; iter++) {
        byte high = (byte) ( (bytes[iter] & 0xf0) >> 4);
        byte low =  (byte)   (bytes[iter] & 0x0f);
        sb.append(nibble2char(high));
        sb.append(nibble2char(low));
    }

    return sb.toString();
}

private static char nibble2char(byte b) {
    byte nibble = (byte) (b & 0x0f);
    if (nibble < 10) {
        return (char) ('0' + nibble);
    }
    return (char) ('a' + nibble - 10);
}

答案 1 :(得分:1)

byte[] deviceaddress = info.getDeviceAddress();
String _url = ByteArrayUtilities.byteArrayToHex(deviceaddress)

为我工作。 享受。