加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 从jni访问加速度计

发布时间:2020-12-15 00:34:44 所属栏目:Java 来源:网络整理
导读:我正在尝试制作一个 Android应用程序,我需要在jni中访问加速度计. java代码: mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); jni代码: jclass cls_co
我正在尝试制作一个 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调用它不是更好吗?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读