Please bear with me, I am an iPhone developer and this whole android this confuses me a bit.
I have some c++ methods that are called from a cocos2d-x CCMenuItem. Therefore I cannot send any parameters, according to the docs.
I need to open a url with the android browser which will require me to call a JAVA function to start a new intent.
I understand that I need to create a VM, however the below code gives me the error:
jni/../../Classes/OptionsScene.cpp:184: error: 'JNI_CreateJavaVM' was not declared in this scope
I was looking at this thread: Calling a java method from c++ in Android
But he uses parameters, and I can't do that. And I don't see where those are in his code to just make them myself.
I don't know what the string should be in the 'Find Class' method. Also, I assume it is pretty terrible to create a new VM instance in every method I need to call. How would I create one as a singleton to use across the board?
This is my c++ code called by my menu item:
#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();
And this is the JAVA Method that I need to call:
public class WebExecute extends Activity{
public void website(){
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com"));
startActivity(browserIntent);
}
}
Honestly, I am struggling with this, any help is appreciated. Thanks.
If you are looking at how to call a java method which does not take in any arguments, the format is jmethodID mid = env->GetStaticMethodID(myClass, "myMethod", "()V");
()
is how you tell it does not take in any params.
V
says it returns void. Ljava/lang/String;
should be used if the method returns an object of type String
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With