2015-05-11 35 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调用它会不会更好?