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