Detect Movement Accurately using Accelerometer in Android -


i implementing demo timer, vibration ( @ particular condition ), when press start timer starts running.. , when stop using stop button, stops.

now have integrate functionality, when person shifts device (while timer running), should reset timer. working pretty good, accelerometer functionality not working absolutely accurate. needs fast jerk reset timer.

suggest me solution same.

here code

public class sensoraccelerometer implements sensoreventlistener {      private context context;     private sensormanager sensormanager;     private sensor accelerometer;     private textview timelabel;     private handler mhandler;     runnable run;      private float mlastx, mlasty, mlastz;     private final float noise = (float) 3.0;      public sensoraccelerometer(context context) {      }       public sensoraccelerometer(context context,textview timelabel, handler mhandler2, runnable mupdatetimetask) {         // todo auto-generated constructor stub          this.context = context;         this.timelabel = timelabel;         this.mhandler = mhandler2;         this.run = mupdatetimetask;          initialisesensor();     }       public void initialisesensor(){         sensormanager = (sensormanager)context.getsystemservice(context.sensor_service);         accelerometer = sensormanager.getdefaultsensor(sensor.type_all);         sensormanager.registerlistener(this, accelerometer,sensormanager.sensor_delay_normal);     }      public void unregistersensor(){         sensormanager.unregisterlistener(this);         toast.maketext(context, "sensor stopped..", toast.length_short).show();     }       public void onaccuracychanged(sensor sensor, int accuracy) {      }      public void onsensorchanged(sensorevent event) {     float x = event.values[0];     float y = event.values[1];     float z = event.values[2];      maccellast=maccelcurrent;      maccelcurrent = floatmath.sqrt(x*x + y*y + z*z);     float delta = maccelcurrent - maccellast;     maccel = maccel * 0.9f + delta;      if(maccel>0.5){         timeractivity.mstarttime = systemclock.uptimemillis();         mhandler.removecallbacks(run);         mhandler.postdelayed(run, 100);     } 

}

timer activity

public class timeractivity extends activity {      public static long mstarttime = 0l;     private textview mtimerlabel;      private handler mhandler = new handler();      string timerstop1;      @override     public void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);         setcontentview(r.layout.main);          mtimerlabel = (textview) findviewbyid(r.id.texttimer);          button timerstartbutton = (button) findviewbyid(r.id.btntimer);                timerstartbutton.setonclicklistener(new view.onclicklistener() {             public void onclick(view view){                  if(mstarttime == 0l){                     mstarttime = systemclock.uptimemillis();                     mhandler.removecallbacks(mupdatetimetask);                     mhandler.postdelayed(mupdatetimetask, 100);                      //activating sensor , acclerometer                     sensoraccelerometer acc = new sensoraccelerometer(view.getcontext(), mtimerlabel,mhandler,mupdatetimetask);                 }                                                }         });           button timerstopbutton = (button) findviewbyid(r.id.btntimerstop);                timerstopbutton.setonclicklistener(new view.onclicklistener() {             public void onclick(view view){                  mhandler.removecallbacks(mupdatetimetask);                 mtimerlabel.settext(timerstop1);                 mstarttime = 0l;                  sensoraccelerometer scc = new sensoraccelerometer(view.getcontext(),mtimerlabel,mhandler,mupdatetimetask);                 scc.unregistersensor();             }         });       }        private runnable mupdatetimetask = new runnable(){          public void run() {              final long start = mstarttime;             long millis = systemclock.uptimemillis()- start;              int seconds = (int) (millis / 1000);             int minutes = seconds / 60;             seconds = seconds % 60;              mtimerlabel.settext("" + minutes + ":"                                   + string.format("%02d", seconds));                                  timerstop1 = minutes + ":"                       + string.format("%02d", seconds);              mhandler.postdelayed(this, 200);                      }        };       protected void onpause() {         super.onpause();         sensoraccelerometer scc = new sensoraccelerometer(this,mtimerlabel,mhandler,mupdatetimetask);         scc.unregistersensor();     };  }  

i think next stage in development of app @ values of acceleration produced in spreadsheet. use excel this, tool can produce graphs do. alter onsensorchanged() like

public void onsensorchanged(sensorevent event) {     float x = event.values[0];     float y = event.values[1];     float z = event.values[2];      float maccelcurrent = floatmath.sqrt(x*x + y*y + z*z);     float maccel = maccel * 0.9f + maccelcurrent * 0.1f;     log.d("onsensorchanged",system.currenttimemillis()+","+maccelcurrent +","+maccel);  } 

and can capture currenttime, maccelcurrent , maccel android logging mechanism. alternatively, create own text file, write values there, , open file in tool can produce graphs. graphs, can decide values use trigger.


Comments

Popular posts from this blog

jquery - How can I dynamically add a browser tab? -

node.js - Getting the socket id,user id pair of a logged in user(s) -

keyboard - C++ GetAsyncKeyState alternative -