listener - Android compass issue -


so im trying make app tracks direction phone pointed via compass , once button hit on screen displays number of pointed in degrees. far understand how compass created can not find values pointed direction in relation north. here have far.

public class compass extends activity implements onclicklistener, sensoreventlistener{      private final sensormanager dirpoint;     float var;     textview thenumber;      button directionin;      public compass(){          dirpoint = (sensormanager) getsystemservice(context.sensor_service);     }      public void onaccuracychanged(sensor sensor, int accuracy) {}     public void onsensorchanged(sensorevent event) {}      @override     protected void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);          thenumber = (textview) findviewbyid(r.id.output);         directionin =(button) findviewbyid(r.id.buton);          directionin.setonclicklistener(new onclicklistener(){              @override             public void onclick(view v) {                 //gets direction of phone compass                 // ((textview)findviewbyid(r.id.output)).settext(var);             }         }     } } 

any welcomed or if im headed in right direction nice.

you have implement "compass". can this:

let activity implement sensoreventlistener , add necessary fields:

public class compassactivity extends activity implements sensoreventlistener {      private sensormanager sensormanager;     private sensor accelerometer;     private sensor magnetometer;     private float[] lastaccelerometer = new float[3];     private float[] lastmagnetometer = new float[3];     private boolean lastaccelerometerset = false;     private boolean lastmagnetometerset = false;     private float[] rotationmatrix = new float[9];     private float[] orientation = new float[3];     private float currentdegree = 0f; 

in oncreate method of activity , start 2 sensors, accelerometer , magnetometer:

        // oncreate method stub ...         sensormanager = (sensormanager) getsystemservice(context.sensor_service);         accelerometer = sensormanager.getdefaultsensor(sensor.type_accelerometer);         magnetometer = sensormanager.getdefaultsensor(sensor.type_magnetic_field);         sensormanager.registerlistener(this, accelerometer, sensormanager.sensor_delay_ui);         sensormanager.registerlistener(this, magnetometer, sensormanager.sensor_delay_ui);         // more oncreate method stub .... 

in method of sensoreventlistener can calculate heading of phone , calculate bearing between current location , other location:

    @override     public void onsensorchanged(sensorevent event) {         if (event.sensor == this.accelerometer) {             system.arraycopy(event.values, 0, this.lastaccelerometer, 0, event.values.length);             this.lastaccelerometerset = true;         } else if (event.sensor == this.magnetometer) {             system.arraycopy(event.values, 0, this.lastmagnetometer, 0, event.values.length);             this.lastmagnetometerset = true;         }          if (this.lastaccelerometerset && this.lastaccelerometerset) {             sensormanager.getrotationmatrix(this.rotationmatrix,null, this.lastaccelerometer, this.lastmagnetometer);             sensormanager.getorientation(this.rotationmatrix, this.orientation);               float azimuthinradiands = this.orientation[0];              // heading of phone. if want             // rotate view north don´t forget have             // rotate negative value.             float azimuthindegrees = (float) math.todegrees(azimuthinradiands);          }     } 

but don´t forget there more behind compass. have show user if magnetic field sensor uncalibrated. have calculate difference between magnetic , geographic north...

i have created small compass helper class. howto in readme. provide information need present compass on screen:

compass assistant on github

it provides current heading of device. please don´t hesitate ask me if have problems.


Comments

Popular posts from this blog

basic authentication with http post params android -

vb.net - Virtual Keyboard commands -

How to get multiresult with multicondition in Sql Server -