感谢分享,写的很详细
https://www.jianshu.com/p/e576c7e1c403
核心
全局 java 上下文对象
反射
public void updateEvent(Event event) {
//TODO
}
void JniClient::updateEvent(int position, int action, float *pointerCoords) {
JNIEnv *env;
int getEnvStat = j_VM->GetEnv((void **) &env, JNI_VERSION_1_6);
if (getEnvStat == JNI_EDETACHED) {
if (j_VM->AttachCurrentThread(&env, nullptr) != 0) {
return;
}
}
jclass javaClass = env->GetObjectClass(jDeviceClient);
if (javaClass == nullptr) {
IVR_LOG_DEBUG("Unable to find class");
j_VM->DetachCurrentThread();
return;
}
jmethodID javaCallbackId = env->GetMethodID(javaClass, "updateEvent", "(Lcom/xxx/Event;)V");
if (javaCallbackId == nullptr) {
IVR_LOG_DEBUG("Unable to find method:onProgressCallBack");
return;
}
jclass PointerCoords = env->FindClass("com/xxx/PointerCoords");
jmethodID sdkInit = env->GetMethodID(PointerCoords, "<init>", "(FF)V");
jobject jObject = env->NewObject(PointerCoords, sdkInit, pointerCoords[0], pointerCoords[1]);
jclass event = env->FindClass("com/xxxx/Event");
jmethodID eventInit = env->GetMethodID(event , "<init>", "(IILcom/xxxx/PointerCoords;)V");
jobject jEvent= env->NewObject(event , eventInit , position, action, jObject );
env->CallVoidMethod(jDeviceClient, javaCallbackId, jEvent);
env->DeleteLocalRef(jControllerEvent);
env->DeleteLocalRef(jUSBDeviceInfoObject);
env = nullptr;
}
网友评论