如何从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)
为我工作。 享受。