Android中使用jni,ndk的C语言回调方法
2013-08-19 14:49
381 查看
http://blog.sina.com.cn/s/blog_4b650d650100lw43.html
如果使用了c++,应该用(env)->CallVoidMethod(gJniObj,gJinMethod,(*env)->NewStringUTF(env, tChars));
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));
相关文章推荐
- Android(安卓)开发通过NDK调用JNI,使用opencv做本地c++代码开发配置方法实现边缘检测代码(2)
- Android-使用C++实现调用本地方法返回字符串显示在界面上/NDK-JNI开发实例(八)
- Android jni 使用C语言调用java中的log方法
- Android(安卓)开发通过NDK调用JNI,使用opencv做本地c++代码开发配置方法 边缘检测 范例代码
- [置顶] Android 中 c 代码回调Java代码的详细步骤(jni、NDK的使用)
- jni使用c语言调用android shell命令方法
- Android(安卓)开发通过NDK调用JNI,使用opencv做本地c++代码开发配置方法 边缘检测 范例代码
- [转]Android通过NDK调用JNI,使用opencv做本地c++代码开发配置方法
- Android ndk jni中回调java的方法&字段描述符
- Android Studio NDK环境配置及JNI使用方法
- Android中JNI的使用方法
- Android项目使用Dcloud架构处理极光推送跳转以及加载JS回调方法
- Android上jni c++使用MediaCodec的方法
- Android中JNI的使用方法
- Android Stuido Ndk-Jni 开发(五):Jni回调java静态方法和非静态方法
- Android中JNI的使用方法(转载)
- OSG for Android新手教程系列(四)——JNI与NDK的使用
- Android JNI使用方法步驟(限windows)
- Google_android_JNI使用方法
- Android For JNI(一)——JNI的概念以及C语言开发工具dev-c++,编写你的第一个C语言程序,使用C启动JAVA程序