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

问题描述:

我正在使用BluetoothSerialPortInfo类来获取与我的黑莓配对的蓝牙设备。当我尝试打印每个设备的设备地址值时,我没有看到或获取实际的蓝牙地址。我正在使用下面的代码。如何从BluetoothSerialPortInfo类获取蓝牙地址的实际格式?

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

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

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

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

感谢,

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); 
} 

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

为我工作。 享受。