2015-05-11 32 views
7

我想要製作一個android應用程序,其中我需要訪問jni中的加速度計。從jni訪問加速度計

的Java代碼

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

JNI代碼:

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"); 

jobject sensor越來越null

+0

問題已解決:) – patrick

+2

_「問題已解決」_對於其他人遇到此問題並不特別有用。解決方案到底是什麼? – Michael

+0

您無法直接通過「Sensor.TYPE_ACCELEROMETER。 」調用getDefaultSensor(),您必須首先創建Sensor.TYPE_ACCELEROMETER的jint類型對象 – patrick

回答

0

Sensor.TYPE_ACCELEROMETER是int類型的內聯常量,其值應爲1,應該在此處傳遞。

但無論如何,這兩行分成9行的JNI代碼看起來很糟糕。離開Java代碼的原始線,然後從JNI調用它會不會更好?