我需要在C ++代码上在Android软键盘上按下的键的unicode值,但看起来NativeActivity不公开'getUnicodeChar'方法。所以我试着用JNI调用它,但该函数的GetMethodID返回'0'。这是我第一次使用JNI,所以我可能做错了。我想我必须以某种方式将我的'AInputEvent'提供给Java,但我不确定如何。这是我写的代码:
JavaVM* java_vm = and_app->activity->vm;
JNIEnv* jni_env = and_app->activity->env;
JavaVMAttachArgs attach_args;
attach_args.version = JNI_VERSION_1_6;
attach_args.name = "NativeThread";
attach_args.group = NULL;
jint result = java_vm->AttachCurrentThread(&jni_env, &attach_args);
if(result == JNI_ERR)
{
return 0;
}
jclass class_key_event = jni_env->FindClass("android.view.KeyEvent");
jmethodID method_get_unicode_char = jni_env->GetMethodID(class_key_event, "getUnicodeChar", "()I");
int return_key = jni_env->CallIntMethod(class_key_event, method_get_unicode_char);
java_vm->DetachCurrentThread();
return return_key;
答案 0 :(得分:2)
FindClass
的语法非常特殊,它要求the JNI documentation调用“一个完全限定的类名”,这意味着一个包名称用斜线替换了点。
在您的情况下,使用:
jclass class_key_event = jni_env->FindClass("android/view/KeyEvent");
应该让您的代码正常工作,或者至少将其推向正确的方向!