05_锅炉压力案例_java实现
最开始是有机顶盒,后来电视里面都带着一个安卓的设备.现在空调、冰箱、洗衣机都跃跃欲试地想把这个东西加上.海尔出了一款智能冰箱,就是在冰箱门上嵌了一个12寸的屏幕。这个屏幕实际上就是一个安卓的平板似的。就可以在厨房或者是冰箱上看着菜谱了。实际上就是个噱头,离所谓的智能家具还有点远。
工业的场合里面也可以去用到相关的安卓的设备。可能是做一些硬件的,可能他们公司做了一些仪表。早先仪表上显示的都是用linux,然后用qt画这个界面写这个东西,相对来讲实现起来会比较麻烦。所以好多仪表公司这个界面就不用纯linux去做了,也用一个安卓的设备。相对来讲安卓的操作系统还有谷歌去维护,比这个linux要靠谱一些。所以好多仪器仪表上也会用到咱们的安卓设备。如果你到了一个硬件的公司,怎么去跟硬件的公司进行配合。
举这个例子:锅炉压力
锅炉会监控它的压力值。像化工的场合,比如去搞石油,去做石油相关加工的这些东西都会涉及到我要把锅炉里面温度给它提高,提高温度最终的目的就是我搞一个密闭的容器,然后呢让液体产生的这个蒸汽充满这一个容器,充满容器之后就可以去利用蒸汽压来提高液体的沸点,从而进一步提高它反应的温度。但是密闭的容器一定会有一个承受压力的上限,这个时候一定会有一个压力表来监测这个锅炉的压力。
早期的压力表就是一个模拟的设备,模拟的设备就是有一个指针,用指针来显示这个状态。
现在老式的模拟的压力表可能用的比较少了,咱们可以搞一个数字的。数字的压力表可以搞一个柱状图,通过它的高和低来展示这个压力值。上面还可以显示一个具体的压力的值。现在可以把这个东西嵌到锅炉上。比如这个东西是安卓的设备,用安卓的设备的好处是可以对它实现一个远程的监控。
锅炉都会有泄压阀,这个不管是机械的也好还是数字的也好,都会实现锅炉压力到一定的范围之内都会自己弹起来,然后自己放气。没问题之后这个泄气阀再落下去。一旦有问题了,泄气阀抬起来了压力依然还往上走,那这个时候咱们可以通过安卓的设备给看锅炉的或者值班人员发短信或者打一个电话或者报警,告诉他赶紧过来然后呢。
实现锅炉压力的显示。用ProgressBar来展示它。ProgressBar在安卓里面是一个横向的进度条或者说是一个转圈。最终用这个东西显示不太靠谱。首先用ProgressBar来把基本的需求实现,接下来用自定义控件实现一个竖状的进度条。


压力值应该是有一个压力传感器,通过这个压力传感器把这个压力值给它读出来。怎么去跟压力传感器进行交互?肯定通过C的代码去驱动。驱动工程师会给你返回一个函数。你调这个函数就能拿到当前压力值的大小。由于要跟C进行交互,所以要用JNI.
首先调startMonitor获取到这个值之后,咱们就可以通过C的方法来回调这个setPressure(int pressure)把这个值pressure再给它设置进来.实际上你直接传也是可以的,比如说你startMonitor()可以给它返回一个int类型的值,然后我在java这边再去调setProgress(pressure)把这个参数给它设置进来,这样也没问题。现在咱们顺便把回调也复习一下,所以咱们现在通过回调的方式来做这个事。
java这边的代码就写完了
package com.itheima.pressurediagram; import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.ProgressBar; public class MainActivity extends Activity { private ProgressBar pb_pressure; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pb_pressure = (ProgressBar) findViewById(R.id.pb_pressure);
pb_pressure.setMax(100);
} public void start(View v){
startMonitor();
}
public void stop(View v){
stopMonitor();
}
public void setPressure(int pressure){//设置进度条的进度
pb_pressure.setProgress(pressure);
}
//开始检测压力的本地方法
public native void startMonitor();
//停止检测压力的本地方法
public native void stopMonitor();
}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context=".MainActivity" > <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="start"
android:text="开始检测" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="stop"
android:text="结束检测" />
<ProgressBar
android:id="@+id/pb_pressure"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@android:style/Widget.ProgressBar.Horizontal"
/>
</LinearLayout>
回顾JNI开发的过程,把这些C这边的方法也给它写好。
05_锅炉压力案例_java实现的更多相关文章
- 06_锅炉压力案例_progressbar实现
相关的native方法可以用javah来生成一个头文件.拿着这个的MainActivity,用它来生成一个头文件. Signature是当前这个方法的方法签名.() V全空参数返回的是void. /* ...
- 【JNI】锅炉压力监测器
public class MainActivity extends Activity { private MyProgressBar pb; static{ System.loadLibrary(&q ...
- python-面向对象-05_面向对象封装案例 II
面向对象封装案例 II 目标 士兵突击案例 身份运算符 封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 —— 将 属性 和 方法 封装 到一个抽象的 类 中 外界 使用 类 创建 对象, ...
- android113 自定义进度条
MainActivity: package com.itheima.monitor; import android.os.Bundle; import android.app.Activity; im ...
- js地址下拉列表中全职工作
/******************************************************************* *输出全国各省辖市下拉列表项writeCitys() *输出企 ...
- python就业班-淘宝-目录.txt
卷 TOSHIBA EXT 的文件夹 PATH 列表卷序列号为 AE86-8E8DF:.│ python就业班-淘宝-目录.txt│ ├─01 网络编程│ ├─01-基本概念│ │ 01-网络通信概述 ...
- C# 历史曲线控件 基于时间的曲线控件 可交互的高级曲线控件 HslControls曲线控件使用教程
本篇博客主要对 HslControls 中的曲线控件做一个详细的教程说明,大家可以根据下面的教程开发出高质量的曲线控件 Prepare 先从nuget下载到组件,然后就可以使用组件里的各种组件信息了. ...
- easyui的增删改
陈旧的开发模式PM:“我要这个功能”后端:“这个先找前端做个模板”前端:“模板做完了”后端:“我来对接一下,这里样式不对”前端:“我改完了”后端:“功能交付”PM:“春节要加这个活动”后端:“这个先找 ...
- C#事件和委托(C#学习笔记03)
委托 1. C# 中的委托类似于 C 或 C++ 中指向函数的指针.委托表示引用某个方法的引用类型变量,运行时可以更改引用对象. 2. 特别地,委托可以用于处理事件或回调函数.并且,所有的委托类都是从 ...
随机推荐
- table JS合并单元格
function _w_table_rowspan(_w_table_id,_w_table_colnum){ _w_table_firsttd = ""; _w_table_cu ...
- 怎样用JMeter做接口测试?
本文介绍JMeter如何做web service测试,一般来说web服务,一般指的是HTTP请求相关的内容.这里就介绍一下如何利用JMeter做基于HTTP的web接口测试.接口也叫API(Appli ...
- Installing Zabbix 3.2 in Centos 6.8 Clean Install Dependencies Errors
ZABBIX Forums > Zabbix Discussions and Feedback > Zabbix Troubleshooting and Problems > Ins ...
- eclipse安装Aptana 插件,并设置使之能提示css,js,html,帮助编写代码
在Eclipse 4.2 上安装 Aptana 3.2遇到的错误 就是找不到什么文件来着,我在装maven的时候也遇到了. 烦人... (这文章是我还在用eclipse的时候,为了编写js代码的时候提 ...
- 解决json_encode中文乱码
在使用json_encode之前把字符用函数urlencode()处理一下,然后再json_encode,输出结果的时候在用函数urldecode()转回来
- hdu - 1565 方格取数(1) && 1569 方格取数(2) (最大点权独立集)
http://acm.hdu.edu.cn/showproblem.php?pid=1565 两道题只是数据范围不同,都是求的最大点权独立集. 我们可以把下标之和为奇数的分成一个集合,把下标之和为偶数 ...
- js格式化日期时间
// 对Date的扩展,将 Date 转化为指定格式的String // 月(M).日(d).周(E).小时(h).分(m).秒(s).季度(q) 可以用 1-2 个占位符, // 年(y)可以用 1 ...
- poj——1469 COURSES
COURSES Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 24192 Accepted: 9426 Descript ...
- Linux下查看硬盘UUID和修改硬盘UUID(转)
查看硬盘UUID: 1. ls -l /dev/disk/by-uuid 2. blkid /dev/sda5 修改硬盘UUID: 1.新建和改变分区的UUID sudo uuidgen | xarg ...
- 携程Apollo(阿波罗)配置中心使用Google代码风格文件(在Eclipse使用Google代码风格)(配合阿里巴巴代码规约快速设置)
Apollo默认使用了Google的代码风格,文件放在这里: https://github.com/ctripcorp/apollo/tree/master/apollo-buildtools/sty ...