我正在使用BluetoothSerialPortInfo类将蓝牙设备与我的黑莓配对。当我尝试打印每个设备的设备地址值时,我看不到或得到实际的蓝牙地址。我使用以下代码。
String btAddress = mPortInfo [count] .getDeviceAddress()。toString();
我实际上从上面的代码中得到了[@ 4d4cd14c。但我的设备的实际蓝牙地址是:00:21:3c:2d:1F:5c。
如果我使用javax.bluetooth,我会得到实际的蓝牙地址。但我想使用BluetoothSerialPortInfo建立与设备的串行连接。所以我想根据蓝牙地址正确识别我的设备,而不使用设备的友好名称。
如何将从getDeviceAddress()方法获取的原始地址转换为实际的蓝牙地址?
谢谢,
答案 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)
为我工作。 享受。