使用https://github.com/GitGarage/BLEMingleDroid
处理蓝牙通信在接收数据时,我收到一些垃圾字符附加到我的真实消息,下面是我的发送和接收消息的代码
AdvertiseData
byte[] data = message.getBytes();
ParcelUuid pu = ParcelUuid.fromString("0000" + asHex(message.substring(0,2).getBytes()) + "-0000-1000-8000-00805F9B34FB");
AdvertiseData.Builder builder = new AdvertiseData.Builder();
builder.addServiceData(pu, data);
builder.addServiceUuid(pu);
接收数据
@Override
public void onLeScan(final BluetoothDevice newDevice, final int newRssi,
final byte[] newScanRecord) {
String message = new String(newScanRecord);
TextView textViewToChange = (TextView) findViewById(R.id.textView);
String oldText = textViewToChange.getText().toString();
String device = newDevice.getAddress();
String rssi = "" + newRssi;
}
我不知道这个垃圾是什么原因附加到我的真实信息上,任何想法?
答案 0 :(得分:1)
那不是垃圾数据。 scanRecord是一个字节数组,因此您无法将其转换为字符串。
void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord)
scanRecord通常包含字符串,如广告中的设备名称,但它还包含服务uuids和其他需要解析的数据。您需要手动解析此数据。 scanRecord将有一个表示长度的字节,一个表示数据类型的字节,然后是数据。附加长度,类型,值字节可以跟随第一个。类型代码列在Generic Access Profile documentation。
中