|
Size: 2178
Comment: Fixed special signature.
|
← Revision 12 as of 2016-11-20 22:03:47 ⇥
Size: 2229
Comment: Fixed comments in example.
|
| Deletions are marked like this. | Additions are marked like this. |
| Line 24: | Line 24: |
| // This example requires C++ | // This example requires C++ and a custom Java method named "void showHome()" |
| Line 26: | Line 26: |
| // Calls the void showHome() method of the Java instance of MyActivity. | // Calls the void showHome() method of the Java instance of the activity. |
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()
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++ and a custom Java method named "void showHome()"
// Calls the void showHome() method of the Java instance of the activity.
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.
