Wiki Page Content

Differences between revisions 9 and 10
Revision 9 as of 2014-11-20 18:59:14
Size: 2150
Comment: Added a comment about JNI references in example.
Revision 10 as of 2015-02-19 20:28:55
Size: 2182
Comment: Added language info in example.
Deletions are marked like this. Additions are marked like this.
Line 23: Line 23:

// This example requires C++

DRAFT

SDL_AndroidGetJNIEnv

Use this function to retrieve the Java native interface object (JNIEnv) of the current thread on Android builds.

Syntax

void* SDL_AndroidGetJNIEnv(void)

Return Value

Returns a pointer to Java native interface object (JNIEnv) to which the current thread is attached, or 0 on error.

Code Examples

#include "SDL.h"
#include <jni.h>

// This example requires C++

// Calls the void showHome() method of the Java instance of MyActivity.
void showHome(void)
{
    // retrieve the JNI environment.
    JNIEnv* env = (JNIEnv*)SDL_AndroidGetJNIEnv();

    // retrieve the Java instance of the SDLActivity
    jobject activity = (jobject)SDL_AndroidGetActivity();

    // find the Java class of the activity. It should be SDLActivity or a subclass of it.
    jclass clazz(env->GetObjectClass(activity));

    // find the identifier of the method to call
    jmethodID method_id = env->GetMethodID(clazz, "showHome", "()V");

    // effectively call the Java method
    env->CallVoidMethod(activity, method_id);

    // clean up the local references.
    env->DeleteLocalRef(activity);
    env->DeleteLocalRef(clazz);

    // Warning (and discussion of implementation details of SDL for Android):
    // Local references are automatically deleted if a native function called
    // from Java side returns. For SDL this native function is main() itself.
    // Therefore references need to be manually deleted because otherwise the
    // references will first be cleaned if main() returns (application exit).
}

Remarks

The prototype of the function in SDL's code actually declare a void* return type, even if the implementation returns a pointer to a JNIEnv. The rationale being that it allows not to include jni.h in the headers of the SDL.

Version

This function is available since SDL 2.0.0.


CategoryAPI, CategorySystem

None: SDL_AndroidGetJNIEnv (last edited 2015-02-19 20:28:55 by PhilippWiesemann)

Feedback
Please include your contact information if you'd like to receive a reply.
Submit