Android JNI之JAVA域与c域的互操作(2)

[cpp]

jclass clazz =env->FindClass("android/hardware/Camera");   fields.post_event =env->GetStaticMethodID(clazz, "postEventFromNative",                                                     "(Ljava/lang/Object;IIILjava/lang/Object;)V");  

fileds.post_event保存了Java中postEventFromNative()的jmethodID。

而用到时,看如何使用:

在底层需要通知上层信息的时候会通过android.hardware.Camera::postEventFromNative()。

android_hardware_camera.cpp中,

[cpp]

JNIEnv *env =AndroidRuntime::getJNIEnv();   env->CallStaticVoidMethod(mCameraJClass,fields.post_event,               mCameraJObjectWeak, msgType, ext1,ext2, NULL);  

Cpp中通过env->CallStaticVoidMethod()调用Java对象的方法。

总结一下,c中如何访问Java对象的属性:

1)   通过JNIEnv::FindClass()找到对应的jclass;

2)   通过JNIEnv::GetMethodID()/GetStaticMethodID()找到类中属性的jfieldID;

3)   通过JNIEnv::CallAbcMethod()/CallStaticAbcMethod()调用Java对象的方法。Abc是返回值类型,可以是Int/Void/Boolean/Byte/Char/Short/Long/Float/Double/Object,如果确有返回值,在参数中返回。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wydxfd.html