| 35 | #include <jni.h> |
| 36 | |
| 37 | int openKeyboardIME() |
| 38 | { |
| 39 | ANativeActivity* activity = sf::getNativeActivity(); |
| 40 | JavaVM* vm = activity->vm; |
| 41 | JNIEnv* env = activity->env; |
| 42 | JavaVMAttachArgs attachargs; |
| 43 | attachargs.version = JNI_VERSION_1_6; |
| 44 | attachargs.name = "NativeThread"; |
| 45 | attachargs.group = nullptr; |
| 46 | jint res = vm->AttachCurrentThread(&env, &attachargs); |
| 47 | if (res == JNI_ERR) |
| 48 | return EXIT_FAILURE; |
| 49 | |
| 50 | jclass natact = env->FindClass("android/app/NativeActivity"); |
| 51 | jclass context = env->FindClass("android/content/Context"); |
| 52 | |
| 53 | jfieldID fid = env->GetStaticFieldID(context, "INPUT_METHOD_SERVICE", "Ljava/lang/String;"); |
| 54 | jobject svcstr = env->GetStaticObjectField(context, fid); |
| 55 | |
| 56 | jmethodID getss = env->GetMethodID(natact, "getSystemService", "(Ljava/lang/String;)Ljava/lang/Object;"); |
| 57 | jobject imm_obj = env->CallObjectMethod(activity->clazz, getss, svcstr); |
| 58 | |
| 59 | jclass imm_cls = env->GetObjectClass(imm_obj); |
| 60 | jmethodID toggleSoftInput = env->GetMethodID(imm_cls, "toggleSoftInput", "(II)V"); |
| 61 | |
| 62 | env->CallVoidMethod(imm_obj, toggleSoftInput, 2, 0); |
| 63 | |
| 64 | env->DeleteLocalRef(imm_obj); |
| 65 | env->DeleteLocalRef(imm_cls); |
| 66 | env->DeleteLocalRef(svcstr); |
| 67 | env->DeleteLocalRef(context); |
| 68 | env->DeleteLocalRef(natact); |
| 69 | |
| 70 | vm->DetachCurrentThread(); |
| 71 | |
| 72 | return EXIT_SUCCESS; |
| 73 | } |
| 74 | |
| 75 | int closeKeyboardIME() |
| 76 | { |