android中使用jni,ndk的C语言回调方法
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));
}
怎么样?不是很难吧?具体能不能理解,就看大家的编程经验怎么样了?
更多相关文章
- android截图代码
- Android一键锁屏代码
- Android开发中出现Attempt to invoke virtual method...on a nul
- Android(安卓)应用语言设置的实现
- android手势翻页效果【转】
- Android禁止截屏
- -Android(安卓)Studio 快捷键整理分享-SadieYu
- Activity切换动画无效(android:windowIsTranslucent)影响(androi
- Android(安卓)Drawable 系列——ClipDrawable