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

    SpringMVC概念:     他是一个轻量级的开源框架,应用于表现层,基于MVC的设计模式. SpringMVC的特点:     1.他是单例的可以设置成多例.     2.他的线程是安全的    ...

  2. First C program

    come from https://mooc.study.163.com/learn/1000002011?tid=2001530003#/learn/content?type=detail& ...

  3. 【Codeforces 444A】DZY Loves Physics

    [链接] 我是链接,点我呀:) [题意] 题意 [题解] 两个点的子图他们的"密度"是比所有联通生成子图都要大的 "只要胆子大,遇到什么问题都不怕!" [代码] ...

  4. hihoCoder#1119 小Hi小Ho的惊天大作战:扫雷·二

    原题地址 没有复杂算法,就是麻烦,写起来细节比较多,比较考验细心,一次AC好开心. 代码: #include <iostream> #include <vector> #inc ...

  5. 【bzoj1922】[Sdoi2010]大陆争霸 - STL - dijkstra

    信仰斯普林·布拉泽的克里斯国教徒. 幻想历 8012年 3月2日,位于杰森国东部小镇神谕镇的克里斯国教徒发动 起义. 幻想历 8012年 3月7日,神谕镇的起义被杰森国大军以残酷手段镇压. 幻想历 8 ...

  6. 网络编程进阶:并发编程之协程、IO模型

    协程: 基于单线程实现并发,即只用一个主线程(此时可利用的CPU只有一个)情况下实现并发: 并发的本质:切换+保存状态 CPU正在运行一个任务,会在两种情况下切走去执行其他任务(切换有操作系统强制控制 ...

  7. msp430入门编程03

    msp430的C标识符和关键字 msp430入门学习 msp430入门编程

  8. Jam's balance set 暴力

    Jim has a balance and N weights. (1≤N≤20)(1≤N≤20) The balance can only tell whether things on differ ...

  9. 调整JVM内存大小

    首次运行公司项目,出现了内存溢出,具体出现java.lang.OutOfMemoryError: PermGen space和java.lang.OutOfMemoryError:GC overhea ...

  10. php7.3源码编译

    前置条件 autoconf:2.59+ automake:1.4+ libtool:1.4.x(除了1.4.2) re2c:0.13.4+ bison:建议1.281.35 或 1.75 依赖的库 y ...