android - How to capture orientation values after a certain time an activity has started -


i trying read orientation , accelerometer readings 5 seconds after activity has started. tracking sensor readings changing 5 seconds activity, want capture special readings in position. want other processes work normal in meantime. here activity code, doing right?

public class workoutbuddy extends activity implements sensoreventlistener {      textview t1, t2, t3;      compass mycompass;     sensormanager sensormanager;;     private sensor sensoraccelerometer;     private sensor sensormagneticfield;     private float[] valuesaccelerometer;     private float[] valuesmagneticfield;     private float[] startingpositionaccelerometer;     private float[] startingpositionmagneticfield;      @override     protected void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);         setcontentview(r.layout.exercise_buddy);         t1 = (textview)findviewbyid(r.id.textview1);         t2 = (textview)findviewbyid(r.id.textview2);         t3 = (textview)findviewbyid(r.id.textview3);         mycompass = (compass) findviewbyid(r.id.mycompass);          sensormanager = (sensormanager)getsystemservice(sensor_service);         sensoraccelerometer = sensormanager.getdefaultsensor(sensor.type_accelerometer);         sensormagneticfield = sensormanager.getdefaultsensor(sensor.type_magnetic_field);          valuesaccelerometer = new float[3];         valuesmagneticfield = new float[3];          matrixr = new float[9];         matrixi = new float[9];         matrixvalues = new float[3];     }      @override     protected void onpause() {         // todo auto-generated method stub         sensormanager.unregisterlistener(this,sensoraccelerometer);         sensormanager.unregisterlistener(this,sensormagneticfield);         super.onpause();     }      @override     public void onaccuracychanged(sensor sensor, int accuracy) {         // todo auto-generated method stub     }      float azimuth,pitch,roll;     private float[] matrixr;     private float[] matrixi;     private float[] matrixvalues;     boolean startingposition = false;      @override     public void onsensorchanged(sensorevent event) {           if (event.sensor.gettype() == sensor.type_accelerometer) {             valuesaccelerometer = lowpass(event.values.clone(), valuesaccelerometer);         } else if (event.sensor.gettype() == sensor.type_magnetic_field) {             valuesmagneticfield = lowpass(event.values.clone(), valuesmagneticfield);         }         if (valuesaccelerometer != null && valuesmagneticfield != null) {             sensormanager.getrotationmatrix(matrixr, matrixi, valuesaccelerometer, valuesmagneticfield);              if(true){                 sensormanager.getorientation(matrixr, matrixvalues);                  double azimuth = math.todegrees(matrixvalues[0]);                 double pitch = math.todegrees(matrixvalues[1]);                 double roll = math.todegrees(matrixvalues[2]);                  t1.settext("azimuth: " + string.format("%.4f", azimuth));                 t2.settext("pitch: " + string.format("%.4f", pitch));                 t3.settext("roll: " + string.format("%.4f", roll));                  mycompass.update(matrixvalues[0]);                  new java.util.timer().schedule(                          new java.util.timertask() {                             @override                             public void run() {                                 if(startingposition == false){                                     startingpositionaccelerometer= valuesaccelerometer;                                     startingpositionmagneticfield= valuesmagneticfield;                                     startingposition = true;                                 }                             }                         },                          5000                  );                }          }     }      @override     protected void onresume() {         // todo auto-generated method stub         sensormanager.registerlistener(this,sensoraccelerometer,sensormanager.sensor_delay_normal);         sensormanager.registerlistener(this,sensormagneticfield,sensormanager.sensor_delay_normal);         super.onresume();     }      //low pass filter used smooth sensor readings     protected float[] lowpass( float[] input, float[] output ) {         float alpha = 0.25f;         if ( output == null ) return input;              ( int i=0; i<input.length; i++ ) {             output[i] = output[i] + alpha * (input[i] - output[i]);         }         return output;     }   } 

you can use handler perform delayed action.

public void onresume() {     super.onresume();     new handler().postdelayed(new runnable() {          public void run() {                 //record readings here.         }      }, 5000); 

Comments

Popular posts from this blog

user interface - How to replace the Python logo in a Tkinter-based Python GUI app? -

objective c - Greedy NSProgressIndicator Allocation -

how to set an OCR language in Google Drive -