本节学习使用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语言相关推荐

  1. android jni c调用java,Android学习JNI,使用C调用JAVA语言

    本节学习使用C语言调用JAVA语言.在生活中比如我们某些底层的硬件必须使用C语言去编写,当C语言返回的某些数值显示在界面上时,就比如使用JNI.这样可以将C返回的值显示在界面上. 本节模拟传感器返回的 ...

  2. 基于 Android NDK 的学习之旅----- C调用Java

    2019独角兽企业重金招聘Python工程师标准>>> 基于 Android NDK 的学习之旅----- C调用Java 许多成熟的C引擎要移植到Android 平台上使用 , 一 ...

  3. JNI之C++调用Java类 ——java.lang.String

    JNI之C++调用Java类 --java.lang.String 为什么要用C++调用Java类?很难回答,写着文章只是觉得JNI很有意思.于是开始编写一段使用VC++在Windows系统里调用ja ...

  4. android jni 调用java_Android 基于NDK的JNI开发 C调用java和java调用C

    首先,这里所要讲的主要是C调用java的,因为这里网上也没有一个详细的资料,其次,我开发android应用没多久,其中java错误敬请谅解! 关于配置NDK环境问题应该不用再赘述了,这个网上有很多,只 ...

  5. 2019 Android 高级面试题总结 从java语言到AIDL使用与原理

    说下你所知道的设计模式与使用场景 a.建造者模式: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 使用场景比如最常见的AlertDialog,拿我们开发过程中举例,比如C ...

  6. android xe 调用 java,Delphi XE6 for Android 让手机震动(调用Java的函数)

    震动,是调用了 安卓api  JNI 里面的 函数  ,这些都是 调用java的 ,如下面的引用, uses FMX.Helpers.Android, Androidapi.JNI.App, Andr ...

  7. JNI中C调用Java方法

     我们需要在JNI的C代码调用Java代码.实现原理:使用JNI提供的反射借口来反射得到Java方法,进行调用. JNI关键方法讲解. 1. 在同一个类中,调用其他方法 JNIEXPORT voi ...

  8. JNI:本地代码调用Java代码

    1. 本地代码访问Java代码 在被调用的C/C++函数中也可以反过来访问Java程序中的方法 javah 工具生成的C/C++函数声明中,可以看到有两个参数: JNIEXPORT void JNIC ...

  9. Java基础学习(一):Java 语言概述

    一.软件开发介绍 软件开发: 软件就是可以帮助人做事的工具(自我理解). 软件,即一系列按照特定顺序组织的计算机数据和指令的集合.有系统软件和应用软件之分. 人机交互方式 图形化界面(Graphica ...

  10. 5、Android Studio+JNI+Opencv4.5 调用系统相机,实现图像滤波

    基本思想:使用Android Studio+Opencv4.5 实现滤波,并打包成apk,纯属学习~ 该工程git: https://github.com/sxj731533730/AndroidIn ...

最新文章

  1. WPF Viewport3D 解决透视模式时窗体模糊
  2. VUE的ajax拦截器
  3. 口袋操作系统_可以装进口袋的主机要有多小?驰为LarBox迷你主机入手体验
  4. 前端开发跨浏览器计算页面大小、滚动高度
  5. c#垂直投影法_投影学
  6. boost::hana::concat用法的测试程序
  7. 2.13 向量化 logistic 回归
  8. 鸿蒙一号指纹锁,【诉说实情】火车头战狼一号家用防盗门指纹锁怎么样?新手必看内情...
  9. 本地时间转utc时间_有关机器时间、UTC时间、本地时间的总结
  10. 正高职称 程序员_我985毕业33岁正高,职称评审哪里难?轻轻松松过职称
  11. 域名解析到指定端口_南京课工场IT培训:搭建nginx虚拟主机——基于域名、端口和IP...
  12. BMS 中的安规设计
  13. CentOS 基础知识与命令总结
  14. Linux之串口应用
  15. H5前端输入和展示 表情 三种解决方案
  16. 程序员工作9年月薪从1.5K到24K,网友:不如刚毕业985
  17. 李敖-学习和看书方法
  18. mysql官网下载官网示例sql文件
  19. 电商运营指标体系梳理
  20. java 手写签名,signature java html5+ 手写签名 源码 Develop 238万源代码下载- www.pudn.com...

热门文章

  1. python 【递归 及 二分法】
  2. 第二次作业刘惠惠2.6,2.15
  3. [Django]模型提高部分--聚合(group by)和条件表达式+数据库函数
  4. listview去掉底部多出的边框黑色
  5. Dynamic CRM 2013学习笔记(二十八)用JS动态设置字段的change事件、必填、禁用以及可见...
  6. 用 FragmentManager 替换时使用 GoogleMaps 崩溃 app
  7. oracle热点表online rename
  8. CreateThread _beginThread _begintheadex AfxBeginThead思考
  9. 程序开发基础学习五(json配置、解析文件,c++篇)
  10. Python使用Mysql官方驱动(取出dict类型的数据)