最开始是有机顶盒,后来电视里面都带着一个安卓的设备.现在空调、冰箱、洗衣机都跃跃欲试地想把这个东西加上.海尔出了一款智能冰箱,就是在冰箱门上嵌了一个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实现的更多相关文章

  1. 06_锅炉压力案例_progressbar实现

    相关的native方法可以用javah来生成一个头文件.拿着这个的MainActivity,用它来生成一个头文件. Signature是当前这个方法的方法签名.() V全空参数返回的是void. /* ...

  2. 【JNI】锅炉压力监测器

    public class MainActivity extends Activity { private MyProgressBar pb; static{ System.loadLibrary(&q ...

  3. python-面向对象-05_面向对象封装案例 II

    面向对象封装案例 II 目标 士兵突击案例 身份运算符 封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 —— 将 属性 和 方法 封装 到一个抽象的 类 中 外界 使用 类 创建 对象, ...

  4. android113 自定义进度条

    MainActivity: package com.itheima.monitor; import android.os.Bundle; import android.app.Activity; im ...

  5. js地址下拉列表中全职工作

    /******************************************************************* *输出全国各省辖市下拉列表项writeCitys() *输出企 ...

  6. python就业班-淘宝-目录.txt

    卷 TOSHIBA EXT 的文件夹 PATH 列表卷序列号为 AE86-8E8DF:.│ python就业班-淘宝-目录.txt│ ├─01 网络编程│ ├─01-基本概念│ │ 01-网络通信概述 ...

  7. C# 历史曲线控件 基于时间的曲线控件 可交互的高级曲线控件 HslControls曲线控件使用教程

    本篇博客主要对 HslControls 中的曲线控件做一个详细的教程说明,大家可以根据下面的教程开发出高质量的曲线控件 Prepare 先从nuget下载到组件,然后就可以使用组件里的各种组件信息了. ...

  8. easyui的增删改

    陈旧的开发模式PM:“我要这个功能”后端:“这个先找前端做个模板”前端:“模板做完了”后端:“我来对接一下,这里样式不对”前端:“我改完了”后端:“功能交付”PM:“春节要加这个活动”后端:“这个先找 ...

  9. C#事件和委托(C#学习笔记03)

    委托 1. C# 中的委托类似于 C 或 C++ 中指向函数的指针.委托表示引用某个方法的引用类型变量,运行时可以更改引用对象. 2. 特别地,委托可以用于处理事件或回调函数.并且,所有的委托类都是从 ...

随机推荐

  1. jar项目 BeanDefinitionParsingException: Configuration problem:Unable to locate Spring NamespaceHandler for XML schema namespace

    最近由于项目需要,需要jar项目来处理. 我在项目中整合了Spring,在编辑器中启动没有问题,但是使用ant打包为一个完整jar文件,部署后启动报错如下 org.springframework.be ...

  2. ZOJ 2561 Order-Preserving Codes

    Order-Preserving Codes Time Limit: 5000ms Memory Limit: 65536KB This problem will be judged on ZJU. ...

  3. 九度oj 题目1438:最小公倍数

    题目1438:最小公倍数 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:2451 解决:2057 题目描述: 给定两个正整数,计算这两个数的最小公倍数. 输入: 输入包含多组测试数据,每 ...

  4. Linux下汇编语言学习笔记34 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...

  5. poj_2506_Tiling_201407211555

    Tiling Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7509   Accepted: 3672 Descriptio ...

  6. BootStrap3栅格系统与布局

    栅格系统与布局 Use our powerful mobile-first flexbox grid to build layouts of all shapes and sizes thanks t ...

  7. Vuzzer自动漏洞挖掘工具简单分析附使用介绍

    Vuzzer 是由计算机科学机构  Vrije Universiteit Amsterdam.Amsterdam Department of Informatics 以及 International ...

  8. html实现类似excel的复杂表格,及导出到excel

    1. excellentexport.js https://github.com/jmaister/excellentexport/tree/2.0.3 2.fiddle example  https ...

  9. Android Studio签名打包应用

    转载请注明来源: http://blog.csdn.net/kjunchen/article/details/50812391 可直接看看以下的Android Studio中签名应用 Android要 ...

  10. 网络安全-安全散列函数,信息摘要SHA-1,MD5原理

    -----------------------------------------------欢迎查看网络安全连载博客-----------------------------------[网络安全] ...