From 01a4ab77266016278b0c192574718b2e04406161 Mon Sep 17 00:00:00 2001 From: faketruth Date: Sun, 19 Aug 2012 16:43:47 +0000 Subject: Android: Moved Android stuff to the ~/trunk/Android/ folder! git-svn-id: http://mc-server.googlecode.com/svn/trunk@758 0a769ca7-a7f5-676a-18bf-c427514a06d6 --- Android/jni/ToJava.h | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 Android/jni/ToJava.h (limited to 'Android/jni/ToJava.h') diff --git a/Android/jni/ToJava.h b/Android/jni/ToJava.h new file mode 100644 index 000000000..bc10f01e3 --- /dev/null +++ b/Android/jni/ToJava.h @@ -0,0 +1,59 @@ +#pragma once + +#include +#include +extern JNIEnv* g_CurrentJNIEnv; +extern JavaVM* g_JavaVM; +extern jobject g_JavaThread; +//extern jobject g_JavaActivity; + +//__android_log_vprint(ANDROID_LOG_ERROR,"MCServer", a_Format, argList); + +static void CallJavaFunction_Void_String( jobject a_Object, const std::string & a_FunctionName, const std::string & a_StringParam ) +{ + JNIEnv * oldEnv = g_CurrentJNIEnv; + int status = g_JavaVM->AttachCurrentThread(&g_CurrentJNIEnv, NULL); + __android_log_print(ANDROID_LOG_ERROR,"MCServer", "STATUS: %i old: %p new: %p", status, oldEnv, g_CurrentJNIEnv ); + jstring str = g_CurrentJNIEnv->NewStringUTF( a_StringParam.c_str() ); + + + //__android_log_print(ANDROID_LOG_ERROR,"MCServer", "JNIEnv: %i Object: %i", g_CurrentJNIEnv, a_Object ); + jclass cls = g_CurrentJNIEnv->GetObjectClass( a_Object ); + //__android_log_print(ANDROID_LOG_ERROR,"MCServer", "jclass: %i", cls ); + jmethodID mid = g_CurrentJNIEnv->GetMethodID( cls, a_FunctionName.c_str(), "(Ljava/lang/String;)V"); // void a_FunctionName( String ) + //__android_log_print(ANDROID_LOG_ERROR,"MCServer", "jmethodID: %i", mid ); + if (mid != 0) + { + + __android_log_print(ANDROID_LOG_ERROR,"MCServer", "Going to call right NOW! %s", a_FunctionName.c_str() ); + g_CurrentJNIEnv->CallVoidMethod( a_Object, mid, str ); + } + else + { + __android_log_print(ANDROID_LOG_ERROR,"MCServer", "It was 0, derp" ); + } + + if( oldEnv != g_CurrentJNIEnv ) + { + g_JavaVM->DetachCurrentThread(); + } +} + + +static void CallJavaFunction_Void_Void( jobject a_Object, const std::string & a_FunctionName ) +{ + //__android_log_print(ANDROID_LOG_ERROR,"MCServer", "JNIEnv: %i Object: %i", g_CurrentJNIEnv, a_Object ); + jclass cls = g_CurrentJNIEnv->GetObjectClass( a_Object ); + //__android_log_print(ANDROID_LOG_ERROR,"MCServer", "jclass: %i", cls ); + jmethodID mid = g_CurrentJNIEnv->GetMethodID( cls, a_FunctionName.c_str(), "()V"); // void a_FunctionName( String ) + //__android_log_print(ANDROID_LOG_ERROR,"MCServer", "jmethodID: %i", mid ); + if (mid != 0) + { + //__android_log_print(ANDROID_LOG_ERROR,"MCServer", "Going to call right NOW! %s", a_FunctionName.c_str() ); + g_CurrentJNIEnv->CallVoidMethod( a_Object, mid ); + } + else + { + __android_log_print(ANDROID_LOG_ERROR,"MCServer", "It was 0, derp" ); + } +} \ No newline at end of file -- cgit v1.2.3