如何从两个活动之间的多个回声中返回数据?

问题描述:

我正在写一个通过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

您在setResult中缺少returnIntent。

尝试用

setResult(UartActivity.RESULT_OK, i);