2015-05-11 4 views
7

Я пытаюсь создать приложение android, в котором мне нужно получить доступ к акселерометру в jni.Доступ к акселерометру от 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.

+0

проблема решена :) – patrick

+2

_ «проблема решена» _ не особенно полезна для других, сталкивающихся с этим вопросом. Каково было решение? – Michael

+0

вы не можете вызвать getDefaultSensor() непосредственно с помощью «Sensor.TYPE_ACCELEROMETER». вы должны сначала создать объект типа jint типа Sensor.TYPE_ACCELEROMETER – patrick

ответ

0

Sensor.TYPE_ACCELEROMETER - это встроенная константа типа int и имеет значение 1, которое должно быть передано туда.

Но в любом случае эти две строки, разделенные на 9 строк кода JNI, выглядят плохо. Не лучше ли оставить эти исходные строки кода Java, а затем просто называть его JNI?

Смежные вопросы