Пожалуйста, потерпите меня, я разработчик 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);
}
}
Честно говоря, я борюсь с этим, любая помощь приветствуется. Спасибо.