Android jni 回调Java层函数方法

java层代码:
package com.myjni;

public class MyTestJni {

static {
    System.loadLibrary("MyTestJni");
}

public native void Init();
public native int SetCallback(int tInputId);

public void onNativeCallback(int tInputId, int tInputArg, String tInputString)
{
    System.out.println("damon ===> native callback : "+tInputId + " , "+tInputArg+" , "+tInputString);
}


public MyTestJni()
{
    Init();
}

}

jni接口代码:
static JavaVM *pXJavaVm=NULL;
static jobject tXJavaObject;

//回调函数的处理
static void MyTestCallback(int tInputId, int tInputArg, const char *pInputString)
{
JNIEnv *pTempEnv;

//ALOGD(“damon ===> callback : %d %d - %s \n”, tInputId, tInputArg, pInputString);

if(pXJavaVm==NULL)
    return ;

pXJavaVm->AttachCurrentThread(&pTempEnv, NULL);
if(pTempEnv==NULL)
    return ;

jclass tTempJavaClass=pTempEnv->GetObjectClass(tXJavaObject);
if(tTempJavaClass==NULL)
{
    ALOGD("damon ===> fail to find java class !\n");
    return ;
}

jmethodID tTempJavaCallback=pTempEnv->GetMethodID(tTempJavaClass, "onNativeCallback", "(IILjava/lang/String;)V");
if(tTempJavaCallback==NULL)
{
    ALOGD("damon ===> fail to find method onNativeCallback !\n");
    return ;
}

jstring tTempString=pTempEnv->NewStringUTF(pInputString);

pTempEnv->CallVoidMethod(tXJavaObject, tTempJavaCallback, tInputId, tInputArg, tTempString);

pTempEnv->DeleteLocalRef(tTempString);

pXJavaVm->DetachCurrentThread();

}

/*
* Class: com_myjni_TestJni
* Method: Init
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_myjni_TestJni_Init
(JNIEnv *pInputEnv, jobject tInputObj)
{
pInputEnv->GetJavaVM(&pXJavaVm);
tXJavaObject=pInputEnv->NewGlobalRef(tInputObj);
}

/*
* Class: com_myjni_TestJni
* Method: SetCallback
* Signature: (I)I
*/
JNIEXPORT jint JNICALL Java_com_myjni_TestJni_SetCallback
(JNIEnv *pInputEnv, jobject tInputObj, jint tInputId)
{
return (jint)XSetCallback(tInputId, MyTestCallback);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值