Вызов метода JAVA из C++ с помощью JNI, без параметров

Пожалуйста, потерпите меня, я разработчик iPhone, и весь этот Android меня немного смущает.

У меня есть несколько методов С++, которые вызываются из cocos2d -x CCMenuItem. Поэтому я не могу отправить какие-либо параметры, согласно документам.

Мне нужно открыть URL-адрес в браузере Android, который потребует от меня вызова функции JAVA, чтобы начать новое намерение.

Я понимаю, что мне нужно создать виртуальную машину, однако приведенный ниже код выдает ошибку:

jni/../../Classes/OptionsScene.cpp:184: error: 'JNI_CreateJavaVM' was not declared in this scope

Я смотрел эту тему:Вызов метода Java из C++ в Android

Но он использует параметры, а я так не могу. И я не вижу, где они находятся в его коде, чтобы просто сделать их самому.

Я не знаю, какая строка должна быть в методе «Найти класс». Кроме того, я предполагаю, что создавать новый экземпляр виртуальной машины в каждом методе, который мне нужно вызвать, довольно ужасно. Как мне создать его как синглтон для повсеместного использования?

Это мой код С++, вызываемый моим пунктом меню:

#include 
...
JavaVM *vm; // Global
...
void OptionsScene::website(){
JNIEnv *env;
JavaVMInitArgs vm_args;
vm_args.version = JNI_VERSION_1_2;
vm_args.nOptions = 0;
vm_args.ignoreUnrecognized = 1;

jint result = JNI_CreateJavaVM(&vm, (void **)&env, &vm_args); // This line still errors

jclass clazz = env->FindClass("com/prndl/project/WebExecute");
jmethodID method = env->GetMethodID(clazz, "website", "(Ljava/lang/String;)V");
env->CallVoidMethod(NULL,method);

vm->DestroyJavaVM();

И это метод JAVA, который мне нужно вызвать:

public class WebExecute extends Activity{
    public void website(){
        Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com"));
        startActivity(browserIntent);
    }
}

Честно говоря, я борюсь с этим, любая помощь приветствуется. Спасибо.

5
задан Community 23 May 2017 в 12:31
поделиться