Android学习JNI,使用C调用JAVA语言
本节学习使用C语言调用JAVA语言。在生活中比如我们某些底层的硬件必须使用C语言去编写,当C语言返回的某些数值显示在界面上时,就比如使用JNI。这样可以将C返回的值显示在界面上。
本节模拟传感器返回的值,通过进度条显示灵敏度,然后显示到界面上。
1:界面布局就补多说了。里面就2个Button,一个用于开启监控,一个用于关闭监控,一个进度条
2:Activity代码如下:
//开始监控button
public void start(View v)
{startMonitor();
}//停止监控button
public void stop(View v)
{stopMonitor();
}//开始监控和停止监控的本地方法
public native void startMonitor();
public native void stopMonitor();//c语言调用java的刷新进度条函数
public void showValue(int progress)
{bar.setProgress(progress);
}
3:本地JNI代码
#include <jni.h>
#include <stdio.h>
#include <stdlib.h>
int monitor = 1;//随机产生的值
int getPressure()
{return rand()%100;
}/** Class: com_demo_ccalljava_MainActivity* Method: startMonitor* Signature: ()V*/
JNIEXPORT void JNICALL Java_com_demo_ccalljava_MainActivity_startMonitor(JNIEnv *env, jobject obj)
{while(monitor){//获取当前的压力值int value = getPressure();//利用反射找打show方法//1:找到字节码文件jclass cClass = (*env)->FindClass(env, "com/demo/ccalljava/MainActivity");//2:找到方法id//show是调用java方法的名字, (I)V是该方法的签名jmethodID methodID = (*env)->GetMethodID(env,cClass, "showValue", "(I)V");//3:调用方法(*env)->CallVoidMethod(env, obj, methodID, value);sleep(1);}
}/** Class: com_demo_ccalljava_MainActivity* Method: stopMonitor* Signature: ()V*/
JNIEXPORT void JNICALL Java_com_demo_ccalljava_MainActivity_stopMonitor(JNIEnv *env , jobject obj)
{monitor = 0;
}
3:加载动态库
static{System.loadLibrary("CCallJava");}
4:开始监控显示:
当按下开始后,出现了卡死GUI,这是因为startMonitor是跑在主线程的,所以卡住GUI
5:修改,startMonitor运行在子线程
//开始监控button
public void start(View v)
{Thread thread = new Thread(){@Overridepublic void run() {startMonitor();}};thread.start();
}
6:运行再次显示效果:
可以正常显示。
Android学习JNI,使用C调用JAVA语言相关推荐
- android jni c调用java,Android学习JNI,使用C调用JAVA语言
本节学习使用C语言调用JAVA语言.在生活中比如我们某些底层的硬件必须使用C语言去编写,当C语言返回的某些数值显示在界面上时,就比如使用JNI.这样可以将C返回的值显示在界面上. 本节模拟传感器返回的 ...
- 基于 Android NDK 的学习之旅----- C调用Java
2019独角兽企业重金招聘Python工程师标准>>> 基于 Android NDK 的学习之旅----- C调用Java 许多成熟的C引擎要移植到Android 平台上使用 , 一 ...
- JNI之C++调用Java类 ——java.lang.String
JNI之C++调用Java类 --java.lang.String 为什么要用C++调用Java类?很难回答,写着文章只是觉得JNI很有意思.于是开始编写一段使用VC++在Windows系统里调用ja ...
- android jni 调用java_Android 基于NDK的JNI开发 C调用java和java调用C
首先,这里所要讲的主要是C调用java的,因为这里网上也没有一个详细的资料,其次,我开发android应用没多久,其中java错误敬请谅解! 关于配置NDK环境问题应该不用再赘述了,这个网上有很多,只 ...
- 2019 Android 高级面试题总结 从java语言到AIDL使用与原理
说下你所知道的设计模式与使用场景 a.建造者模式: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 使用场景比如最常见的AlertDialog,拿我们开发过程中举例,比如C ...
- android xe 调用 java,Delphi XE6 for Android 让手机震动(调用Java的函数)
震动,是调用了 安卓api JNI 里面的 函数 ,这些都是 调用java的 ,如下面的引用, uses FMX.Helpers.Android, Androidapi.JNI.App, Andr ...
- JNI中C调用Java方法
我们需要在JNI的C代码调用Java代码.实现原理:使用JNI提供的反射借口来反射得到Java方法,进行调用. JNI关键方法讲解. 1. 在同一个类中,调用其他方法 JNIEXPORT voi ...
- JNI:本地代码调用Java代码
1. 本地代码访问Java代码 在被调用的C/C++函数中也可以反过来访问Java程序中的方法 javah 工具生成的C/C++函数声明中,可以看到有两个参数: JNIEXPORT void JNIC ...
- Java基础学习(一):Java 语言概述
一.软件开发介绍 软件开发: 软件就是可以帮助人做事的工具(自我理解). 软件,即一系列按照特定顺序组织的计算机数据和指令的集合.有系统软件和应用软件之分. 人机交互方式 图形化界面(Graphica ...
- 5、Android Studio+JNI+Opencv4.5 调用系统相机,实现图像滤波
基本思想:使用Android Studio+Opencv4.5 实现滤波,并打包成apk,纯属学习~ 该工程git: https://github.com/sxj731533730/AndroidIn ...
最新文章
- WPF Viewport3D 解决透视模式时窗体模糊
- VUE的ajax拦截器
- 口袋操作系统_可以装进口袋的主机要有多小?驰为LarBox迷你主机入手体验
- 前端开发跨浏览器计算页面大小、滚动高度
- c#垂直投影法_投影学
- boost::hana::concat用法的测试程序
- 2.13 向量化 logistic 回归
- 鸿蒙一号指纹锁,【诉说实情】火车头战狼一号家用防盗门指纹锁怎么样?新手必看内情...
- 本地时间转utc时间_有关机器时间、UTC时间、本地时间的总结
- 正高职称 程序员_我985毕业33岁正高,职称评审哪里难?轻轻松松过职称
- 域名解析到指定端口_南京课工场IT培训:搭建nginx虚拟主机——基于域名、端口和IP...
- BMS 中的安规设计
- CentOS 基础知识与命令总结
- Linux之串口应用
- H5前端输入和展示 表情 三种解决方案
- 程序员工作9年月薪从1.5K到24K,网友:不如刚毕业985
- 李敖-学习和看书方法
- mysql官网下载官网示例sql文件
- 电商运营指标体系梳理
- java 手写签名,signature java html5+ 手写签名 源码 Develop 238万源代码下载- www.pudn.com...
热门文章
- python 【递归 及 二分法】
- 第二次作业刘惠惠2.6,2.15
- [Django]模型提高部分--聚合(group by)和条件表达式+数据库函数
- listview去掉底部多出的边框黑色
- Dynamic CRM 2013学习笔记(二十八)用JS动态设置字段的change事件、必填、禁用以及可见...
- 用 FragmentManager 替换时使用 GoogleMaps 崩溃 app
- oracle热点表online rename
- CreateThread _beginThread _begintheadex AfxBeginThead思考
- 程序开发基础学习五(json配置、解析文件,c++篇)
- Python使用Mysql官方驱动(取出dict类型的数据)