【问题标题】:Accessing accelerometer from jni从 jni 访问加速度计
【发布时间】:2015-07-21 15:45:20
【问题描述】:

我正在尝试制作一个 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”直接调用getDefaultSensor(),必须先创建一个Sensor.TYPE_ACCELEROMETER的jint类型对象

标签: java android java-native-interface


【解决方案1】:

Sensor.TYPE_ACCELEROMETER 是 int 类型的内联常量,其值为 1,应在此处传递。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-21
    • 2011-05-27
    • 1970-01-01
    • 2015-01-16
    • 2017-09-19
    • 1970-01-01
    • 1970-01-01
    • 2011-11-08
    相关资源
    最近更新 更多