2015-05-11 24 views
7

Sto cercando di creare un'app per Android in cui è necessario accedere all'accelerometro in jni.Accesso all'accelerometro da jni

java codice:

mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);   
mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 

jni codice:

jclass cls_context = env->FindClass("android/content/Context"); 
jfieldID tService = env->GetStaticFieldID(cls_context, "SENSOR_SERVICE","Ljava/lang/String;"); 
jstring jstr = (jstring)env->GetStaticObjectField(cls_context, tService); 

//getSystemService(SENSOR_SERVICE); 
jclass cls_act = env->GetObjectClass(activity); 
jmethodID GetSystemService = env->GetMethodID(cls_act,"getSystemService","(Ljava/lang/String;)Ljava/lang/Object;"); 
jobject systemservice = env->CallObjectMethod(activity,GetSystemService,jstr); 

//getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 
jclass sensormanager = env->GetObjectClass(systemservice); 
jmethodID getdefaultsensor = env->GetMethodID(sensormanager, "getDefaultSensor", "(I)Landroid/hardware/Sensor;"); 
jobject sensor = env->CallObjectMethod(systemservice, getdefaultsensor, "Sensor.TYPE__ACCELEROMETER"); 

Ma jobject sensor sta ottenendo null.

+0

il problema è risolto :) – patrick

+2

_ "il problema è risolto" _ non è particolarmente utile per gli altri che si imbattono in questa domanda. Qual è stata esattamente la soluzione? – Michael

+0

non puoi chiamare getDefaultSensor() direttamente da "Sensor.TYPE_ACCELEROMETER. devi prima creare un oggetto tipo jint di Sensor.TYPE_ACCELEROMETER – patrick

risposta

0

Sensor.TYPE_ACCELEROMETER è una costante in linea di tipo int e ha valore 1, che deve essere passato lì.

Ma in ogni caso quelle 2 linee divise in 9 righe di codice JNI sembrano scadenti. Non sarebbe meglio lasciare quelle linee originali di codice Java e quindi chiamarlo semplicemente da JNI?