Android中使用jni,ndk的C语言回调方法

来源:互联网 发布:vb怎么随机生成数字 编辑:程序博客网 时间:2024/06/05 03:15

http://blog.sina.com.cn/s/blog_4b650d650100lw43.html

 

Java代码:    //====================================================================    package com.example.hellojni;    import android.app.Activity;    import android.util.Log;    import android.widget.TextView;    import android.os.Bundle;    public class HelloJni extends Activity    {         public String mJniMsg;          public HelloJni(){}         @Override        public void onCreate(Bundle savedInstanceState)        {             super.onCreate(savedInstanceState);             //System.loadLibrary("hello-jni");             TextView  tv = new TextView(this);             tv.setText("Eagle,morning!");             setContentView(tv);             doCLanguageWork();        }        public void myCallbackFunc(String nMsg)        {             Log.v("EagleTag","back message:"+nMsg);        }        public native String doCLanguageWork();        static        {            System.loadLibrary("hello-jni");        }    }     C语言代码部分:    //====================================================================    #include <string.h>    #include <jni.h>    JNIEXPORT jstring JNICALL    jobject  gJniObj;    jclass  gJniClass;    jmethodID gJinMethod;    void  GetInstance(JNIEnv* env, jclass obj_class);    void  DisplayCallBack(JNIEnv* env);    JNIEXPORT jstring JNICALL    Java_com_example_hellojni_HelloJni_doCLanguageWork(JNIEnv* env, jobject obj)    {         char  tChar[256];         gJniClass=0;         gJinMethod=0;          gJniClass=(*env)->FindClass(env,"com/example/hellojni/HelloJni");         if(gJniClass==0 || gJniClass==NULL)              return (*env)->NewStringUTF(env, "-1");           GetInstance(env,gJniClass);         gJinMethod=(*env)->GetMethodID(env,gJniClass,"myCallbackFunc","(Ljava/lang/String;)V");         if(gJinMethod==0 || gJinMethod==NULL)             return (*env)->NewStringUTF(env, "-2");          strcpy(tChar,"PROG:10");         (*env)->CallVoidMethod(env,gJniObj,gJinMethod,(*env)->NewStringUTF(env, tChar));         DisplayCallBack(env);          return (*env)->NewStringUTF(env, "Eagle is really great!......");    }    void GetInstance(JNIEnv* env, jclass obj_class)     {           jmethodID construction_id = (*env)->GetMethodID(env,obj_class, "<init>", "()V");          gJniObj = (*env)->NewObject(env,obj_class, construction_id);     }     void DisplayCallBack(JNIEnv* env)    {         char tChars[256];          strcpy(tChars,"DEBUG:Hello,Eagle");         (*env)->CallVoidMethod(env,gJniObj,gJinMethod,(*env)->NewStringUTF(env, tChars));     }


如果使用了c++,应该用(env)->CallVoidMethod(gJniObj,gJinMethod,(*env)->NewStringUTF(env, tChars));

原创粉丝点击