2017-05-04 2 views
0

Arduino BLEからAndroid Appにgpsの位置データを小さなチャンク(20バイト未満)で送信しています。私はアンドロイドアプリでデータを取得していますが、どうすれば小さなチャンクを文字列に結合できますか? これは、Androidアプリケーションに位置情報を送信するarduinoプログラムのコードです。Arduino BLEからAndroidにデータを送信する方法、受信したUARTデータをAndroid Appにまとめる方法

  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 

受信データから緯度、経度、速度を取得するにはどうすればよいですか。何か助けてくれてありがとう!

答えて

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で受信したデータをフォーマットしてからお使いのアクティビティに送信することも可能です。

+0

@Suren、ありがとうございました。 – proCoder

関連する問題