经过JNI,C++ 回调java程序
通过JNI,C++ 回调java程序
我们知道通过注册jni方法的方式,实现java调用c++,
同理,在java调用C++的封装类中,定义接口函数,并在初始化(static 部分)调用一个C++ native函数
在c++的native函数中,根据 JNIEnv* env, jobject obj(就是那个java类对象)获取接口函数指针,全部获取并保存,
这样,在需要调用java方法时,通过env调用即可;以下为gps的例子:
1、static jmethodID method_reportLocation = env->GetMethodID(clazz, "reportLocation", "(IDDDFFFJ)V");
2、JNIEnv* env = AndroidRuntime::getJNIEnv();
env->CallVoidMethod(mCallbacksObj, method_reportLocation, location->flags,
(jdouble)location->latitude, (jdouble)location->longitude,
(jdouble)location->altitude,
(jfloat)location->speed, (jfloat)location->bearing,
(jfloat)location->accuracy, (jlong)location->timestamp);