How to read compass orientation? lazarus / 43-Android ---------------------------------------------------------------------- stab · 2013-05-02 11:37 Hi, I'm writing a map-app and want to be able to read north direction to rotate the map as a user changes direction. Using jni I managed to get hold of the sensorManagerObject but got stucked when trying to retrieve methodId for defaultSensor needed to get magnetometer. Is there some way to get a list of methods and methodId:s via jni? EDIT: Documentation for SensorManager is like: public Sensor getDefaultSensor (int type) and the sensorManagerClass is retrieved OK through:   sensorManagerClass := javaEnvRef^^.FindClass(javaEnvRef, 'android/hardware/SensorManager'); To my understanding that would indicate a call like following to retrieve methodId:   javaMethodId_getDefaultSensor :=     javaEnvRef^^.GetMethodID(javaEnvRef, sensorManagerClass, 'getDefaultSensor', '(I)Landroid/hardware/SensorManager;'); Making a call with that code gives: javaMethodId_getDefaultSensor = nil Could someone give a clue to whats is wrong? Regards stab ---------------------------------------------------------------------- felipemdc · 2013-05-06 06:14 The method parameters descriptor is wrong, it should be: (I)Landroid/hardware/Sensor; It returns a Sensor, not a SensorManager ---------------------------------------------------------------------- stab · 2013-05-06 13:21 Thanks for answering Felipemdc, Noticed that I would be able to achieve what I want through SensorManager.getOrientation. Read SensorManager.java and found:   public static float[] getOrientation(float[] R, float values[]) Modified my code to: procedure TfrmJNITestMain.GetOrientation; var   sensorManagerClass : jclass;   javaMethodId_getOrientation : JMethodID; begin   // get sensorManagerClass   sensorManagerClass := javaEnvRef^^.FindClass(javaEnvRef, 'android/hardware/SensorManager');   if sensorManagerClass = nil then     debugln('******** sensorManagerClass NIL ********')   else     debugln('******** sensorManagerClass NOT NIL ********');   // get MethidId   javaMethodId_getOrientation :=   javaEnvRef^^.GetStaticMethodID(javaEnvRef, sensorManagerClass, 'getOrientation', '([F[F)F');   if javaMethodId_getOrientation = nil then     debugln('******** javaMethodId_getOrientation NIL ********')   else     debugln('******** javaMethodId_getOrientation NOT NIL ********'); end;     But still I get method not found. Could you please tell me what I'm doing wrong? Regards stab