Как я могу вызвать java-метод (нестатический) из собственного (C++) кода? Я видел несколько примеров в Интернете, которые не поняли точно (это не работает для меня).
Я пробую что-то вроде этого кода:
Код java:
public void displayInterstitial() {
if(adView!=null)
{
if (adView.getVisibility() == AdView.VISIBLE) {
adView.post(new Runnable() {
public void run() {
adView.setVisibility(AdView.INVISIBLE);
}
});
}
}
}
C++ код:
// JNI OnLoad
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved)
{
g_JavaVM = vm;
return JNI_VERSION_1_6;
}
JNIEnv* MenuState::getJniEnv() {
JavaVMAttachArgs attachArgs;
attachArgs.version = JNI_VERSION_1_6;
//attachArgs.name = ">>>NativeThread__Any";
// attachArgs.group = NULL;
JNIEnv* env;
if (g_JavaVM->AttachCurrentThread(&env, &attachArgs) != JNI_OK) {
env = NULL;
}
return env;
}
void MenuState::displayInterstitial()
{
JNIEnv *env = getJniEnv();
jclass cls = env->FindClass("org/libsdl/app/SDLActivity");
jmethodID dispin = env->GetMethodID(cls, "displayInterstitial", "()V");
env->CallVoidMethod(obj, dispin);
}
Извините, может быть, дублированный вопрос. Как я могу получить jobject (obj) для этой строки env-> CallVoidMethod (obj, dispin); ?
Самый простой способ - создать объект в Java, а затем передать дескриптор JNI.
Если вы хотите создать объект в коде C++, просто получите класс, как вы, найдите конструктор <init> и используйте env-> NewObject (...)