J'essaie simplement d'enregistrer des données d'accéléromètre et d'écrire un fichier dans une carte SD avec un clic sur un bouton. Tout en exécutant l'application dans mon Nexus S (avec 4.1.2), il se fige après une minute. J'ai essayé de l'exécuter dans le téléphone Galaxy Nexus et cela fonctionne bien. Pour certaines raisons, je dois travailler dans Nexus S. Quelqu'un peut-il me suggérer ce qui pourrait être la raison de s'écraser. J'ai essayé de voir le journal, mais ce n'est pas par un message d'erreur.L'application se bloque lors de l'enregistrement des données d'accéléromètre: Android
Voici mon code:
final SensorEventListener mySensorEventListener = new SensorEventListener() {
public void onSensorChanged(SensorEvent sensorEvent) {
if (sensorEvent.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
xAxis_lateralA = sensorEvent.values[0];
yAxis_longitudinalA = sensorEvent.values[1];
zAxis_verticalA = sensorEvent.values[2]; // TODO apply the acceleration changes to your application.
textView.append("\nACC_x = "+ xAxis_lateralA + ", ACC_y = "+yAxis_longitudinalA+ ", ACC_z = " + zAxis_verticalA);
acc += "\n"+miliSec()+", "+xAxis_lateralA + ", "+ yAxis_longitudinalA+", "+zAxis_verticalA;
try {
File myFile = new File("/sdcard/acc.txt");
myFile.createNewFile();
FileOutputStream fOut = new FileOutputStream(myFile);
OutputStreamWriter myOutWriter = new OutputStreamWriter(fOut);
myOutWriter.append(acc);
myOutWriter.close();
fOut.close();
} catch (Exception e) {
Toast.makeText(getBaseContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
}
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
};
startButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Toast.makeText(getBaseContext(),"Done writing SD 'acc.txt'",Toast.LENGTH_SHORT).show();
sm = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
int sensorType = Sensor.TYPE_ACCELEROMETER;
sm.registerListener(mySensorEventListener,sm.getDefaultSensor(sensorType), SensorManager.SENSOR_DELAY_NORMAL);
}// onClick
}); // btnWriteSDFile
stopButton = (Button) findViewById(R.id.stopButton);
stopButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
int sensorType = Sensor.TYPE_ACCELEROMETER;
sm.unregisterListener(mySensorEventListener, sm.getDefaultSensor(sensorType));
Toast.makeText(getBaseContext(), "Stopped Recording",Toast.LENGTH_SHORT).show();
finish();
}// onClick
}); // btnstopButton
Les opérations sur les fichiers semblent être effectuées sur le thread UI. C'est probablement la cause des blocages. Envisagez d'utiliser un Thread ou un AsyncTask à cette fin. –
Ok merci pour la suggestion. Je donne un coup de feu. – Pow
Eh bien, j'ai essayé d'ajouter une sous-classe et j'ai appelé la méthode execute juste après 'acc + =" \ n "+ miliSec() +", "+ xAxis_lateralA +", "+ yAxis_longitudinalA +", "+ zAxis_verticalA; différence cependant. – Pow