2017-04-10 20 views
1

我正在寫一個通過UART與傳感器設備進行通信的android應用程序。該裝置將數據發送到基於一個4個字符的ASCII命令手機格式化像這樣:如何從兩個活動之間的多個回聲中返回數據?

「:」[CHAR1] [CHAR2] [Carriage_return](例如, 「:AB \ R」)

我有兩個活動,CalculationActivity和UartActivity。

CalculationActivity需要從UartActivity獲得三個不同的傳感器讀數,並對它們執行特定的計算。例如,

CalculationActivity:

protected void onCreate(Bundle savedInstanceState){ 
    // blah, blah, blah... 
    Intent i = new Intent(this, UartActivity.class); 
    startActivityForResult(i, DATA_REQUEST); 
} 

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == DATA_REQUEST) { 
     if (resultCode == RESULT_OK) { 
      string sensor_data_distance = data.getStringExtra("distance"); 
      //need these also: 
      //string sensor_data_heading = data.getStringExtra("heading"); 
      //string sensor_data_elevation = data.getStringExtra("elevation"); 
      //... 
      //parse the strings and perform calculation 
      //... 
     } 
     } 
    } 
} 

UartActivity將命令發送到設備。收到它們後,設備回顯請求的數據,我的RX迴應處理程序捕獲它。例如,

UartActivity:

protected void onCreate(Bundle savedInstanceState){ 
    // setup and initialize UART 
    String get_distance_command = ":DI\r"; //command for distance 
    String get_heading_command = ":HE\r"; //command for heading 
    String get_elevation_command = ":EL\r"; //command for elevation 

    uartSendData(get_distance_command); //send command to TX handler 

    //want to be able to send these other two: 
    //uartSendData(get_heading_command); 
    //uartSendData(get_elevation_command); 
} 

@Override 
public synchronized void onDataAvailable(){ //RX echo handler 
    //blah, blah, blah... 
    //get received bytes 
    final String result_string = bytesToText(bytes); 
    Intent i = new Intent(); 
    i.putExtra("distance", result_string); 
    //want to be able to do this for the other two: 
    //i.putExtra("heading", result_string); 
    //i.putExtra("elevation", result_string); 
    setResult(UartActivity.RESULT_OK); 
    finish(); 
} 

希望你可以從代碼的註釋行什麼,我想在這裏完成推斷。請注意,我只能成功讀取一個讀數(在本例中爲距離),但不能超過此值(在這種情況下爲標題和標高)。

我認爲每個命令都有三次不同的UartActivity,但我並不喜歡這種解決方案。我寧願只運行一次活動,發送三個命令,捕獲所有回顯響應,並將它們傳回給CalculationActivity。這甚至有可能嗎?

+0

,如果你不'完成(會發生什麼情況更換

setResult(UartActivity.RESULT_OK); 

);''在onDataAvailable()'?可以運行所有三個命令並在'onDataAvailable()'中檢查以查看類型應該是什麼? – Derek

回答

0

您在setResult中缺少returnIntent。

嘗試用

setResult(UartActivity.RESULT_OK, i); 
相關問題