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?
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