i'm writing app show accelerometer readings, able yesterday write accelerometer code in main activity , works fine on emulator , device.
but today trying make class contains accelerometer code , return the 3 integers x,y,z in integer array only, make code think it`s right every time run project on emulator , give me 0 ,0,0 . wish , please .
activity code ::
package com.example.accelerometer_sensor; import android.os.bundle; import android.app.activity; import android.view.menu; import android.widget.textview; public class mainactivity extends activity { int [] accval = new int[3]; textview acceleration; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); accelerometerclass acc = new accelerometerclass(); acc.accelerometerinit(this); accval =acc.vals; acceleration = (textview)findviewbyid(r.id.acceleration); acceleration.settext("x: "+acc.vals[0]+ "\ny: "+acc.vals[1]+ "\nz: "+acc.vals[2]); } @override public boolean oncreateoptionsmenu(menu menu) { // inflate menu; adds items action bar if present. getmenuinflater().inflate(r.menu.activity_main, menu); return true; } }
accelerometerclass :
package com.example.accelerometer_sensor; import android.content.context; import android.hardware.sensor; import android.hardware.sensorevent; import android.hardware.sensoreventlistener; import android.hardware.sensormanager; public class accelerometerclass implements sensoreventlistener { int [] vals = new int[3]; sensor accelerometer; sensormanager sm; public void accelerometerinit(context context) { sm = (sensormanager)context.getsystemservice(context.sensor_service); accelerometer=sm.getdefaultsensor(sensor.type_accelerometer); sm.registerlistener(this, accelerometer,sensormanager.sensor_delay_normal); } protected void onresume() { sm.registerlistener(this, accelerometer, sensormanager.sensor_delay_normal); } protected void onpause() { sm.unregisterlistener(this); } @override public void onaccuracychanged(sensor sensor, int accuracy) { // todo auto-generated method stub } @override public void onsensorchanged(sensorevent event) { // todo auto-generated method stub vals[0]=(int)event.values[0]; vals[1]=(int)event.values[1]; vals[2]=(int)event.values[2]; } }
please stuck in problem along time , appreciate .
i suspect text being written before onsensorchanged event being fired. goes this...
- register listener
- write text (all 0s @ point)
- event fires , changes x,y,z values
the text written though values aren't updating. wrong test stopping thread few seconds before writing values text field thread.sleep(2000);
2000 in milliseconds.
it event isn't firing. can check adding line inside onsensorchanged() method logs logcat.
log.d(tag, "onsensorchanged method has been invoked");
edit: ran it. works fine, you're not getting results want because text being written before event firing. need update ui when onsensorchanged() method called.