Je code:Obtenir des données provenant de capteurs Android sans Listeners
public class readSensorsData extends Activity implements SensorListener {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
sm = (SensorManager) getSystemService(SENSOR_SERVICE);
}
@Override
public void onSensorChanged(int sensor, float[] values) {
synchronized (this) {
if (sensor == SensorManager.SENSOR_ORIENTATION) {
//get orientation
}
if (sensor == SensorManager.SENSOR_ACCELEROMETER) {
//get acceleration
}
}
if (sensor == SensorManager.SENSOR_MAGNETIC_FIELD) {
//get magnetic fiels
}
Bundle bundle = new Bundle(); //results from activity
bundle.putFloatArray("acceleration", array);
Intent mIntent = new Intent();
mIntent.putExtras(bundle);
setResult(RESULT_OK, mIntent);
finish();
}
public void onAccuracyChanged(int sensor, int accuracy) {
}
@Override
protected void onResume() {
super.onResume();
sm.registerListener(this,
SensorManager.SENSOR_ORIENTATION |
SensorManager.SENSOR_ACCELEROMETER |
SensorManager.SENSOR_MAGNETIC_FIELD,
SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
protected void onStop() {
sm.unregisterListener(this);
super.onStop();
}
}
Code
fonctionne, mais ici va mon problème: quand je l'appelle de l'activité principale de cette façon:
Intent i = new Intent(this, readSensorsData.class);
startActivityForResult(i, 1); //1 is for sensors
for(int j=0;j<10;j++)
{
//do sth else here!!!!
try {
Thread.sleep(1000);
} catch (InterruptedException e) {e.printStackTrace();}
//here code for showing result from sensor activity
}
puis je peux voir 10 fois le résultat de 'faire sth else !!!' et quand la boucle est finie je peux voir alors le résultat de l'activité. L'activité du capteur attend donc pour une raison quelconque et lorsque l'activité principale n'a plus rien à faire, les capteurs font leur travail.
bien sûr, je l'ai bien mis en œuvre: onActivityResult (int requestCode, int resultCode, l'intention Intent)
Je veux lire les données sensord directement, sans l'aide d'écouteurs, est-il possible?
dans ces exemples vous utilisez juste 1 activité pour 1 capteur Je veux envoyer en utilisant le paquet d'information Wi-Fi à cette inclusion, orientation, accélération etc, donc outre le fait que je ne peux pas utiliser thread.sleep() i encore ne sais pas comment obtenir ces données à partir de capteurs, puis-je appeler startActivityForResult plusieurs fois, permet de dire en boucle 1000 fois, commencer cette activité et détruire .. et ainsi de suite. À mon avis, ce n'est pas efficace alors comment puis-je le résoudre? Peut-être utiliser le service? – questioner
hmm, je pense que je sais, je vais utiliser thread pour travailler avec ces capteurs – questioner
Si vous souhaitez agréger ou moyenne des données sur 1000 rapports, il suffit de les ajouter à un ArrayList ou quelque chose dans 'onSensorChanged()'. Lorsque le 1000ème rapport arrive, utilisez une 'AsyncTask' pour effectuer vos calculs (le cas échéant) et envoyer les données à votre serveur. – CommonsWare