我正在尝试制作一个
Android应用程序,我需要在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.TYPE_ACCELEROMETER是int类型的内联常量,值为1,应该在那里传递.
但无论如何,分成9行JNI代码的那两行看起来很糟糕.离开那些原始的Java代码然后从JNI调用它不是更好吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。