从jni访问加速度计

pat*_*ick 7 java java-native-interface android

我正在尝试制作一个Android应用程序,我需要在jni中访问加速度计.

java代码:

mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);         
mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
Run Code Online (Sandbox Code Playgroud)

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");
Run Code Online (Sandbox Code Playgroud)

但是jobject sensor越来越好了null.

iir*_*ekm 0

Sensor.TYPE_ACCELEROMETER是一个 int 类型的内联常量,并且有 value 1,应该将其传递到那里。

但无论如何,这两行分成 9 行 JNI 代码看起来很糟糕。保留那些原始的 Java 代码行然后从 JNI 调用它不是更好吗?