我将来自Arduino BLE的gps位置数据作为小块(小于20字节)发送到我的Android应用程序。我在我的Android应用程序中获取数据,但我如何将小块组合成一个字符串。 这是我的arduino程序中的代码,用于将位置数据发送到Android应用程序。
String msg = "lat:";
msg += GPS.latitude;
msg += ",";
msg.toCharArray(sendBuffer, 20);
ble.print("AT+BLEUARTTX=");
ble.println(sendBuffer);
String msg1 = "lon:";
msg1 += GPS.longitude;
msg1 += ",";
msg1.toCharArray(sendBuffer, 20);
ble.print("AT+BLEUARTTX=");
ble.println(sendBuffer);
String msg2 = "speed:";
msg2 += GPS.speed;
msg2.toCharArray(sendBuffer, 20);
ble.print("AT+BLEUARTTX=");
ble.println(sendBuffer);
在我的Android应用程序中,这是获取UART数据的代码
if (action.equals(UartService.ACTION_DATA_AVAILABLE)) {
final byte[] txValue = intent.getByteArrayExtra(UartService.EXTRA_DATA);
try {
String receivedData = new String(txValue, "UTF-8");
Log.i(TAG, "receivedData:" + receivedData);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
请查看我的日志,我如何获取数据。
I/ContentValues: receivedData:lat:28.907892,lon:45
I/ContentValues: receivedData:.789005,speed:0.02
请问,如何从所接收的数据中获取纬度,经度,速度作为一个字符串。谢谢你的帮助!
答案 0 :(得分:2)
想法是在字段变量中累积接收的数据。处理由分隔符分割的累积数据的子字符串。 以下是示例代码:
//Field variable
String mReceivedData = "";
if (action.equals(UartService.ACTION_DATA_AVAILABLE)) {
final byte[] txValue = intent.getByteArrayExtra(UartService.EXTRA_DATA);
try {
mReceivedData += new String(txValue, "UTF-8");
int delim;
while((delim = mReceivedData.indexOf('\n')) > -1) {
String dataToProcess = mReceivedData.subString(0, delim);
// Process the data
Log.i(TAG, "dataToProcess:" + dataToProcess);
mReceivedData = mReceivedData.subString(delim + 1);
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
也可以在UartService中正确格式化接收的数据,然后将其发送到您的Activity。