android - How can I unrigerster the listener to read event every 5 seconds -
i trying send data of magnetic field sensor server every 5 seconds facing problem unregister sensorlisterner reading data. have tried sensormanager.registerlistener(this, sensormanager.getdefaultsensor(sensor.type_magnetic_field),1000 * 10);
without seccuss. data being sent server 12 time in 1 second.
i appreciate help.
code:
public class mainactivity extends actionbaractivity implements sensoreventlistener { string telsastring; private textview magneticx; private textview magneticy; private textview magneticz; private textview magnetict; private sensormanager sensormanager = null; private float magx; private float magy; private float magz; @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); sensormanager = (sensormanager) getsystemservice(sensor_service); // capture magnetic sensor related view elements magneticx = (textview) findviewbyid(r.id.valmag_x); magneticy = (textview) findviewbyid(r.id.valmag_y); magneticz = (textview) findviewbyid(r.id.valmag_z); magnetict = (textview) findviewbyid(r.id.valmag_t); // register magnetic sensor sensormanager.registerlistener(this, sensormanager.getdefaultsensor(sensor.type_magnetic_field), sensormanager.sensor_delay_normal); final sensoreventlistener listener = this; new handler().postdelayed(new runnable() { @override public void run() { sensormanager.unregisterlistener(listener); } }, 5000); } @override protected void onpause() { // unregister listener sensormanager.unregisterlistener(this); super.onpause(); } @override protected void onstop() { // unregister listener sensormanager.unregisterlistener(this); super.onstop(); } @override protected void onresume() { super.onresume(); sensormanager.registerlistener(this, sensormanager.getdefaultsensor(sensor.type_magnetic_field), sensormanager.sensor_delay_normal); } public void onaccuracychanged(sensor sensor, int accuracy) { } public void onsensorchanged(sensorevent sensorevent) { synchronized (this) { if (sensorevent.sensor.gettype() == sensor.type_magnetic_field) { magx = sensorevent.values[0]; magy = sensorevent.values[1]; magz = sensorevent.values[2]; magneticx.settext(float.tostring(sensorevent.values[0])); magneticy.settext(float.tostring(sensorevent.values[1])); magneticz.settext(float.tostring(sensorevent.values[2])); double teslaxyz = (math.sqrt((magx * magx) + (magy * magy) + (magz * magz))); magnetict.settext(double.tostring(teslaxyz)); try { jsonobject tesla = new jsonobject(); tesla.put("tesla", teslaxyz); telsastring = tesla.tostring(); new myasynctask().execute(telsastring); } catch (jsonexception e) { e.printstacktrace(); } } } }
edit:
sensormanager.registerlistener(this, sensormanager.getdefaultsensor(sensor.type_magnetic_field), 10*1000*1000); . . . . long curtime = system.currenttimemillis(); if ((curtime - lastupdate) > 10000) { lastupdate = curtime; }
the rate provided 1000 * 10
in microseconds, you requesting 10 millisecond update period. note requested sample period request. the rate may faster or slower, need track times , appropriate thing. when wish stop receiving events, unregister listener sensormanager.unregisterlistener()
method.
Comments
Post a Comment