Android C++调用JAVA
来源:互联网 发布:淘宝华佗大药房卖假药 编辑:程序博客网 时间:2024/05/16 18:24
1:需求分析
在Android中利用NDK进行编程的时候,一般的都是Java层通过JNI调用C++的相关接口,而在有的应用中,需要通过底层C++调用Java层来实现相关功能。比如在进行OMX硬解码画图的时候,需要在底层不断发送请求给Java层,让其不断刷新GlSurfaceView。
2:java层接口
a://弹出消息对话框
publicstaticint showMessage(Stringtitle,String val)
{
newAlertDialog.Builder(m_scMnCtx)
.setTitle(title)
.setMessage(val)
.setPositiveButton("确定",
new DialogInterface.OnClickListener(){
publicvoidonClick(DialogInterface dialoginterface,int i){
}}).show();
return 0;
}
其中参数title为标题,val为消息内容。
b: native方法
publicnativestaticint testCallBack(Stringtitle,String val)
3:JNI层接口
/*
* Class: org_yao_ndk_NDKTest
* Method: testCallBack
* Signature: (Ljava/lang/String;Ljava/lang/String;)I
*/
JNIEXPORT jint JNICALLJava_org_yao_ndk_NDKTest_testCallBack
(JNIEnv *env, jclass obj, jstringtitle, jstring val)
{
jmethodID java_method =env->GetStaticMethodID(obj,"showMessage","(Ljava/lang/String;Ljava/lang/String;)I");
if(java_method == 0)
{
return 0;
}
env->CallStaticIntMethod(obj,java_method,title,val);
return 1;
}
其中,GetStaticMethodID获取java中静态方法的ID,obj为方法所在的类,showMessage为Java层接口名,"(Ljava/lang/String;Ljava/lang/String;)I"其中括号里面对应native方法testCallBack输入参数,外面为返回参数,可以参考/*Signature*/注释信息。在获取到方法ID以后就可以用CallStaticIntMethod来调用Java层接口showMessage了。其中CallStaticIntMethod中Int要和publicnative static int testCallBack(String title,String val)中int一致。
4:调用实现
//为btnShow(C++调用Java)Button加入监听事件
btnShow.setOnClickListener(newView.OnClickListener() {
@Override
publicvoid onClick(View v) {
//TODO Auto-generatedmethod stub
//单击btnShow,弹出消息对话框
NDKTest.testCallBack("test","It is C++ call Java testing");
}
});
这里先通过Java调用C++接口testCallBack,然后在testCallBack中,实现调用Java层接口showMessage,实现Java和C++的互调。当然直接调用Java接口showMessage更简单。
5:测试结果
- Android C调用Java
- android java 调用 c
- Android JNI C调用Java
- android NDK--C 调用java
- android c调用java,c简易计算器
- Android 在C/C++中调用Java
- Android 在C/C++中调用Java
- android C调用JAVA的方法
- Android C 通过JNI 调用JAVA
- Android NDK c调用java代码
- android ndk c/c++ 调用java
- Android 学习JNI,用JAVA调用C
- Android JNI中C调用Java方法
- android JNI java调用c/c++资料
- Android中Java调用C/C++
- Android JNI-c/c++调用java方法
- android studio 调用jni,实现Java调用C语言程序
- 转战Android之NDK(jni, java调用c/c++)
- app-framework学习--修改list后面小箭头
- 【OpenCV学习】矩阵操作总结
- ②读后感之《如何阅读一本书》 莫提默.J.艾德勒【美】
- 在从1到n的正数中1出现的次数 【微软面试100题 第三十题】
- 下面的代码运行时会不会报错
- Android C++调用JAVA
- 谱聚类算法
- 通过GWT RPC实现客户端与服务器端的交互
- ubuntu 14.04 安装gnome后导致unity默认主题错乱
- 雷军---我看未来20年
- 在对话框中使用ON_UPDATE_COMMAND_UI更新菜单
- CCNA学习笔记Day4
- 【VC编程技巧】控件☞4.2自定义EDIT(只限字母字符输入)
- TextView中利用SpannableString文字设置不同格式