关于JNI回调JAVA方法及其注意事项

直接上代码:

JnicallbackActivity.java

package com.app.test;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;


public class JnicallbackActivity extends Activity {


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
     JniMethod obj=new JniMethod();
     obj.setCallBack();
    }
}


JniMethod.java

package com.app.test;


import android.util.Log;


public class JniMethod {
    static {  
        System.loadLibrary("callback");  
    } 
public    native void setCallBack(); 
    public void callback(int len)  
    {  
    Log.v("bb","JNI传回的值===="+len);
    }  
}

callback.c

 #include <string.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
 #include <sys/ioctl.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <jni.h>
 #include <android/log.h>

  /**********传输整数*************


 */
 JNIEXPORT void JNICALL Java_com_app_test_JniMethod_setCallBack(JNIEnv* env,jobject obj)
 {
     //找到java中的类
     jclass cls = (*env)->FindClass(env, "com/app/test/JniMethod");//首先找到被回调函数所在的类 FindClass
     //再找类中的方法
     jmethodID mid = (*env)->GetMethodID(env, cls, "callback", "(I)V");//然后找到这个方法 GetMethodID
     if (mid == NULL)
     {
         return;
     }
     //回调java中的方法
int i;
for(i=0;i<20;i++){
(*env)->CallVoidMethod(env, obj, mid ,i);//Call<被回调函数的返回类型>Method 执行回调
}
 }

Android.mk

LOCAL_PATH := $(call my-dir)
 include $(CLEAR_VARS)
 LOCAL_MODULE  :=callback
 LOCAL_SRC_FILES:=callback.c
 include $(BUILD_SHARED_LIBRARY) 

注意事项:

1,声明的native函数在Jni中的函数体所回调的函数必须同其在一个类中(如上  执行回调的setCallBack和被回调的callback函数都在同一个类中)

2,,native函数不能修饰为static,被回调 的函数也不能被修饰为static,具体原因不详

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值