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

(2010-10-23 14:06:59)

转载

不说太罗嗦了,回调分为Java代码和C语言代码两部分,我举的例子简单而且是通过调试可以运行的.

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
jobjectgJniObj;
jclassgJniClass;
jmethodIDgJinMethod;


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));
}
怎么样?不是很难吧?具体能不能理解,就看大家的编程经验怎么样了?

更多相关文章

  1. android截图代码
  2. Android一键锁屏代码
  3. Android开发中出现Attempt to invoke virtual method...on a nul
  4. Android(安卓)应用语言设置的实现
  5. android手势翻页效果【转】
  6. Android禁止截屏
  7. -Android(安卓)Studio 快捷键整理分享-SadieYu
  8. Activity切换动画无效(android:windowIsTranslucent)影响(androi
  9. Android(安卓)Drawable 系列——ClipDrawable

随机推荐

  1. android 设置textview边框以及点击效果
  2. [Android] 环境配置之正式版Android Stud
  3. 从android 里面读取配置文件
  4. android软键盘隐藏总结
  5. Android resources
  6. TextView中style的应用
  7. Android 解决Handler在运行时加载报空指
  8. Android各版本的SDK Platforms和API Leve
  9. Android旋转屏幕不销毁数据的方法
  10. 你需要知道的Android拍照适配方案