2017-04-10 2 views
1

J'écris une application Android qui communique via UART avec un dispositif de détection. Le dispositif envoie des données au téléphone basé sur une commande ASCII 4 caractères formaté comme ceci:Comment renvoyer des données de plusieurs échos entre deux activités?

":" [char1] [char2] [Carriage_return] (Par exemple, ": AB \ r")

J'ai deux activités, CalculationActivity et UartActivity.

CalculationActivity doit obtenir trois lectures de capteur différentes d'UartActivity et effectuer certains calculs avec celles-ci. Par exemple,

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 envoie les commandes à l'appareil. En les recevant, l'appareil répercute les données demandées et mon gestionnaire d'écho RX l'attrape. Par exemple,

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(); 
} 

Si tout va bien, vous pouvez déduire des lignes commentées de code ce que je suis en train d'accomplir ici. Notez que je suis capable de réussir une seule lecture (distance, dans ce cas), mais pas plus que cela (cap et élévation, dans ce cas).

J'ai envisagé de démarrer l'UartActivity trois fois avec chaque commande, mais je n'aime pas vraiment cette solution. Je préfère ne lancer l'activité qu'une seule fois, envoyer les trois commandes, récupérer toutes les réponses d'écho et les renvoyer à CalculationActivity. Est-ce seulement possible?

+0

Qu'advient-il si vous n'avez pas fini '()' 'dans OnDataAvailable()'? Il est possible d'exécuter les trois commandes et de vérifier le 'onDataAvailable()' pour voir quel devrait être le type? – Derek

Répondre

0

Il vous manque returnIntent dans setResult.

Essayez de remplacer

setResult(UartActivity.RESULT_OK); 

avec

setResult(UartActivity.RESULT_OK, i);