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
Post a Comment