请耐心等待,我是一名iPhone开发人员,对于整个Android系统还有些困惑。
我有一些C++方法被cocos2d-x的CCMenuItem调用。因此,根据文档,我无法发送任何参数。
我需要使用Android浏览器打开一个URL,这将要求我调用一个JAVA函数来启动新意图。
我知道我需要创建一个VM,但下面的代码给我带来了错误:
jni/../../Classes/OptionsScene.cpp:184: error: 'JNI_CreateJavaVM' was not declared in this scope 我看了这个线程:Calling a java method from c++ in Android 但他使用了参数,而我不能这样做。我也不知道在他的代码中哪里可以找到它们,以便自己制作。
我不知道“Find Class”方法中的字符串应该是什么。此外,我认为在每个需要调用的方法中创建一个新的VM实例非常糟糕。如何创建一个单例以在各个领域使用?
这是我的C++代码,由我的菜单项调用:
我有一些C++方法被cocos2d-x的CCMenuItem调用。因此,根据文档,我无法发送任何参数。
我需要使用Android浏览器打开一个URL,这将要求我调用一个JAVA函数来启动新意图。
我知道我需要创建一个VM,但下面的代码给我带来了错误:
jni/../../Classes/OptionsScene.cpp:184: error: 'JNI_CreateJavaVM' was not declared in this scope 我看了这个线程:Calling a java method from c++ in Android 但他使用了参数,而我不能这样做。我也不知道在他的代码中哪里可以找到它们,以便自己制作。
我不知道“Find Class”方法中的字符串应该是什么。此外,我认为在每个需要调用的方法中创建一个新的VM实例非常糟糕。如何创建一个单例以在各个领域使用?
这是我的C++代码,由我的菜单项调用:
#include <jni.h>
...
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);
}
}
说实话,我在这方面很苦恼,需要帮助。谢谢。
JNI_CreateJavaVM
这一行还是其他行也有?你是否仔细检查了编译器/IDE设置,确保包含jni.h
的JDK_HOME/include
目录已经在搜索路径中?对于JDK_HOME/include/android
目录(或者在 Android JDK 中称为操作系统特定目录的目录),也是同样的情况吗? - QuantumMechanic