Calling a JAVA method from C++ with JNI, no parameters

Posted by PRNDL Development Studios on Stack Overflow See other posts from Stack Overflow or by PRNDL Development Studios
Published on 2012-07-04T02:27:58Z Indexed on 2012/07/04 3:16 UTC
Read the original article Hit count: 189

Filed under:
|
|
|
|

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/MyClass.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.

© Stack Overflow or respective owner

Related posts about java

Related posts about android