java - 从 jni 访问加速度计

标签 java android java-native-interface

我正在尝试制作一个 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 正在获取 null

最佳答案

Sensor.TYPE_ACCELEROMETER 是一个 int 类型的内联常量,其值为 1,应该传递到那里。

但是不管怎样,那 2 行分成 9 行的 JNI 代码看起来很糟糕。保留那些原始的 Java 代码行然后直接从 JNI 调用它不是更好吗?

关于java - 从 jni 访问加速度计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30162571/

相关文章:

java - 将 native 查询结果投影到 DTO

android - 无法从蓝牙 socket 读取输入

java - 如何在 JDK 17 应用程序中查找通过 JNI 使用的 native 库?

java - 如何使用运行时命令从另一个 JAR 启动一个 JAR?

java:使用StringBuilder在开头插入

android - 如何选中和取消选中 CheckBox?

android - 堆损坏 - Android native 代码中的 SEGV_MAPERR

java - 将 C++ 项目导出到 Android - JNI/JavaCPP/Visualgdb

JavaFX 2 - Tableview 复选框不显示值

java - 如何将 FieldValue.serverTimestamp() 转换为 Kotlin/Java 日期类