【JNI】锅炉压力监测器
- public class MainActivity extends Activity {
- private MyProgressBar pb;
- static{
- System.loadLibrary("hello");
- }
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- pb = (MyProgressBar) findViewById(R.id.pb);
- pb.setMax(100);
- }
- public void start(View v){
- new Thread(){
- public void run() {
- startMonitor();
- };
- }.start();
- }
- public void stop(View v){
- stopMonitor();
- }
- public native void startMonitor();
- public native void stopMonitor();
- public void show(int pressure){
- pb.setPressure(pressure);
- }
- }
- public class MyProgressBar extends View {
- private int pressure;
- private int max;
- public MyProgressBar(Context context, AttributeSet attrs, int defStyle) {
- super(context, attrs, defStyle);
- // TODO Auto-generated constructor stub
- }
- public MyProgressBar(Context context, AttributeSet attrs) {
- super(context, attrs);
- // TODO Auto-generated constructor stub
- }
- public MyProgressBar(Context context) {
- super(context);
- // TODO Auto-generated constructor stub
- }
- public void setPressure(int pressure) {
- this.pressure = pressure;
- //使当前视图无效,如果当前视图是可见的,那么onDraw会调用,只能在主线程使用
- // invalidate();
- postInvalidate();
- }
- public void setMax(int max) {
- this.max = max;
- }
- @Override
- protected void onDraw(Canvas canvas) {
- Paint paint = new Paint();
- if(pressure < 50){
- paint.setColor(Color.GREEN);
- }
- else if(pressure < 80){
- paint.setColor(0xffff8800);
- }
- else {
- paint.setColor(Color.RED);
- }
- canvas.drawRect(10, 10 + max - pressure, 30, 10 + max, paint);
- }
- }
- #include <jni.h>
- #include <stdio.h>
- #include <stdlib.h>
- int getPressure(){
- //……监测电压……运算得到压力值
- ;
- }
- int monitor;
- JNIEXPORT void JNICALL Java_com_itheima_monitor_MainActivity_startMonitor
- (JNIEnv * env, jobject obj){
- monitor = ;
- while(monitor){
- //获取锅炉压力
- int pressure = getPressure();
- //jclass (*FindClass)(JNIEnv*, const char*);
- jclass clazz = (*env)->FindClass(env, "com/itheima/monitor/MainActivity");
- //jmethodID (*GetMethodID)(JNIEnv*, jclass, const char*, const char*);
- jmethodID methodId = (*env)->GetMethodID(env, clazz, "show", "(I)V");
- //void (*CallVoidMethod)(JNIEnv*, jobject, jmethodID, ...);
- (*env)->CallVoidMethod(env, obj, methodId, pressure);
- sleep();
- }
- }
- JNIEXPORT void JNICALL Java_com_itheima_monitor_MainActivity_stopMonitor
- (JNIEnv * env, jobject obj){
- monitor = ;
- }
Application.mk
- APP_ABI := armeabi x86
Android.mk
- LOCAL_PATH := $(call my-dir)
- include $(CLEAR_VARS)
- LOCAL_MODULE := hello
- LOCAL_SRC_FILES := hello.c
- include $(BUILD_SHARED_LIBRARY)
【JNI】锅炉压力监测器的更多相关文章
- 06_锅炉压力案例_progressbar实现
相关的native方法可以用javah来生成一个头文件.拿着这个的MainActivity,用它来生成一个头文件. Signature是当前这个方法的方法签名.() V全空参数返回的是void. /* ...
- 05_锅炉压力案例_java实现
最开始是有机顶盒,后来电视里面都带着一个安卓的设备.现在空调.冰箱.洗衣机都跃跃欲试地想把这个东西加上.海尔出了一款智能冰箱,就是在冰箱门上嵌了一个12寸的屏幕.这个屏幕实际上就是一个安卓的平板似的. ...
- android113 自定义进度条
MainActivity: package com.itheima.monitor; import android.os.Bundle; import android.app.Activity; im ...
- js地址下拉列表中全职工作
/******************************************************************* *输出全国各省辖市下拉列表项writeCitys() *输出企 ...
- C# 历史曲线控件 基于时间的曲线控件 可交互的高级曲线控件 HslControls曲线控件使用教程
本篇博客主要对 HslControls 中的曲线控件做一个详细的教程说明,大家可以根据下面的教程开发出高质量的曲线控件 Prepare 先从nuget下载到组件,然后就可以使用组件里的各种组件信息了. ...
- C#事件和委托(C#学习笔记03)
委托 1. C# 中的委托类似于 C 或 C++ 中指向函数的指针.委托表示引用某个方法的引用类型变量,运行时可以更改引用对象. 2. 特别地,委托可以用于处理事件或回调函数.并且,所有的委托类都是从 ...
- Android之SDK、NDK、JNI和so文件
1. SDK Android SDK(AndroidSoftware Development Kit),即Android软件开发工具包,Android的SDK基于Java实现,这意味着基于An ...
- 一天掌握Android JNI本地编程 快速入门
一.JNI(Java Native Interface) 1.什么是JNI: JNI(Java Native Interface):java本地开发接口 ...
- JNI/NDK开发
公司的新需求终于解决完了,离测试和发布还有段时间,第一次体验了下没需求没bug的感觉,真是舒爽~然后翻了翻有什么可以学的.无意翻到了Android后期发展的五大趋势.一.性能优化.二.高级UI.三.J ...
随机推荐
- ASP.NET MVC学习笔记-----Bundles
在网页中,我们经常需要引用大量的javascript和css文件,在加上许多javascript库都包含debug版和经过压缩的release版(比如jquery),不仅麻烦还很容易引起混乱,所以AS ...
- [转载]angularjs学习总结 详细教程
http://blog.csdn.net/yy374864125/article/details/41349417#t75 目录(?)[-] 前言 AngularJS概述 AngularJS是什么 A ...
- codevs1080线段树练习
题目描述 Description 一行N个方格,开始每个格子里都有一个整数.现在动态地提出一些问题和修改:提问的形式是求某一个特定的子区间[a,b]中所有元素的和:修改的规则是指定某一个格子x,加上或 ...
- Marriage Ceremonies(状态压缩dp)
Marriage Ceremonies Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu ...
- HDU 4925 Apple Tree(模拟题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4925 解题报告:给你n*m的土地,现在对每一块土地有两种操作,最多只能在每块土地上进行两种操作,第一种 ...
- [Effective JavaScript 笔记]第48条:避免在枚举期间修改对象
注册列表示例 一个社交网络有一组成员,每个成员有一个存储其朋友信息的注册列表. function Member(name){ this.name=name; this.friends=[]; } va ...
- ruby代码重构第二课
(文章都是从我的个人主页上粘贴过来的, 大家也可以访问我的主页 www.iwangzheng.com) 在第一课里提取出了相通的代码,第二课里就把常量提取出来吧 一般把常量的定义写的对应的app/mo ...
- C#开发实例 鼠标篇
鼠标的操作控制: 鼠标是计算机的一个重要组成部分,有很多默认的设置,如双击时间间隔,闪烁频率,移动速度等,本篇使用C#获取这些基本的信息. 1.1获取鼠标信息 ①实例001 获取鼠标双击时间间隔 主要 ...
- 粒子滤波particle filter和目标跟踪
粒子滤波用于跟踪,参考:http://www.cnblogs.com/tornadomeet/archive/2012/03/18/2404817.html http://blog.csdn.net/ ...
- map遍历
Set<Map.Entry<String,String>> ss = params.entrySet(); for(Map.Entry<String,String> ...