将数据从Arduino BLE发送到Android,如何在Android App

时间:2017-05-04 18:43:15

标签: android arduino bluetooth-lowenergy

我将来自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

请问,如何从所接收的数据中获取纬度,经度,速度作为一个字符串。谢谢你的帮助!

1 个答案:

答案 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。