[英]Calling a JAVA method from C++ with JNI, no parameters
請耐心等待,我是一名iPhone開發人員,這整個Android讓我感到困惑。
我有一些從cocos2d-x CCMenuItem調用的c ++方法。 因此,根據文檔,我無法發送任何參數。
我需要用android瀏覽器打開一個url,這需要我調用一個JAVA函數來啟動一個新的intent。
我知道我需要創建一個VM,但下面的代碼給出了錯誤:
jni /../../ Classes / OptionsScene.cpp:184:錯誤:未在此范圍內聲明'JNI_CreateJavaVM'
我正在看這個帖子: 在Android中從c ++調用java方法
但他使用參數,我不能這樣做。 而且我不知道他們的代碼中有哪些內容可以自己創建。
我不知道'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);
}
}
老實說,我正在努力解決這個問題,任何幫助都表示贊賞。 謝謝。
如果您正在研究如何調用不接受任何參數的java方法,則格式為jmethodID mid = env->GetStaticMethodID(myClass, "myMethod", "()V");
()
是你如何告訴它不接受任何參數。
V
表示它返回無效。 Ljava/lang/String;
如果方法返回String
類型的對象,則應該使用它。
很多事情......
JNIEnv* env;
的聲明JNIEnv* env;
並且考慮到你使用的是C ++,你將它用作env->FindClass(someString)
, 而不是你是如何做的。 如果是C,你可以使用FindClass(env, someString)
但在C ++中你使用env->FindClass(someString)
。 FindClass
使用的字符串是完全限定的路徑名,但使用/
作為分隔符而不是.
例如,如果類是Foo
封裝bar.baz.quux
,完全合格的名稱是bar.baz.quux.Foo
,你想給字符串FindClass
是bar/baz/quux/Foo
。 JavaVM* vm
作為全局變量(或者至少可以在需要使用的所有內容中訪問。與調用JNI_CreateJavaVM()
的線程在同一C ++線程中的所有內容都將使用填充的JNIEnv *
想要使用JVM的每個其他線程都需要調用AttachCurrentThread
,它將該線程綁定到JVM並填入一個對該線程有效的新 JNIEnv *
。 JDK_HOME/include
目錄(包含jni.h
)位於包含搜索路徑中? 對於JDK_HOME/include/android
目錄(或者在JDK中調用JDK_HOME/include
的操作特定目錄),相同嗎? 一本非常有用的資源是JNI書
但是在閱讀它時要小心,因為一些示例在C中,而一些示例在C ++中,因此請確保您了解調用約定的不同之處。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.