java - Accessing multiple sensors in non-activity classes -
i trying use multiple sensors accelerator,magnetic field, light , on , each sensor wrote individual class not activity , each of them has sensoreventlistener well. want when user chooses 1 of them start show data on fragment(on mainactivity) , when user changes previous sensor should stop , new 1 should start. however, when try stop previous 1 unregistering listener , doesn't unregister registers , works. want stop previous listener. wrong? ideas?
here sensor class;
public class accelerometer { private sensormanager sensormanager; private sensor sensor; public list<objaccelerometer> lstdata; objaccelerometer currentdata; float lastx,lasty,lastz; string currenttime; int numberofsamples; context context; public accelerometer(context _context,int _numbersample) { context=_context; sensormanager = (sensormanager) context.getsystemservice(context.sensor_service); sensor = sensormanager.getdefaultsensor(sensor.type_accelerometer); numberofsamples=_numbersample; lstdata=new arraylist<>(); } public void registerunregister(boolean register) { if(register) sensormanager.registerlistener(msensorlistener, sensor, sensormanager.sensor_delay_fastest); else sensormanager.unregisterlistener(msensorlistener); } calendar time; private final sensoreventlistener msensorlistener = new sensoreventlistener() { public void onsensorchanged(sensorevent event) { if(numberofsamples>lstdata.size()) { if (currentdata != null) { lastx = currentdata.get_x(); lasty = currentdata.get_y(); lastz = currentdata.get_z(); } currentdata = new objaccelerometer(); time = calendar.getinstance(); currenttime = time.get(calendar.hour) + ":" + time.get(calendar.minute) + ":" + time.get(calendar.second) + ":" + time.get(calendar.millisecond); currentdata.set_time(currenttime); currentdata.set_x(event.values[0]); currentdata.set_y(event.values[1]); currentdata.set_z(event.values[2]); float speed = math.abs(event.values[0] + event.values[1] + event.values[2] - lastx - lasty - lastz); currentdata.set_speed(speed); lstdata.add(currentdata); util.createtoaster(context, "x y z time:" + currentdata.tostring()); } else registerunregister(false); } public void onaccuracychanged(sensor sensor, int accuracy) { } }; }
here code calling them ;
unregisterallsensors(); switch (selectedsensor) { case accelerometer: accelerometer= new accelerometer(context, default_sample_number); accelerometer.registerunregister(true); lstaccelerometer = accelerometer.lstdata; break; case linear_accelerometer: linearaccelerometer= new linearaccelerometer(context, default_sample_number); linearaccelerometer.registerunregister(true); break; ....
here unregisterallsensors() function code:
if(accelerometer!=null) { accelerometer.registerunregister(false); accelerometer=null; } if(linearaccelerometer!=null) { linearaccelerometer.registerunregister(false); linearaccelerometer=null; }
sorry bothering people,it works! made few changes including setting sensormanager final parameter , removing toast message , add toaster register , unregister of each listener. worked! believe problem caused 2 things; 1-toasting message slower process sensing because of though unregistered messages still on screen while. 2- when didn't define sensormanager final , every time getting new instance of size of listener list 0.
still, can sample people want call sensors non-activity classes. thanks!
Comments
Post a Comment