1. public class MainActivity extends Activity {
  2.  
  3. private MyProgressBar pb;
  4.  
  5. static{
  6. System.loadLibrary("hello");
  7. }
  8. @Override
  9. protected void onCreate(Bundle savedInstanceState) {
  10. super.onCreate(savedInstanceState);
  11. setContentView(R.layout.activity_main);
  12. pb = (MyProgressBar) findViewById(R.id.pb);
  13. pb.setMax(100);
  14. }
  15.  
  16. public void start(View v){
  17. new Thread(){
  18. public void run() {
  19. startMonitor();
  20. };
  21. }.start();
  22. }
  23. public void stop(View v){
  24. stopMonitor();
  25. }
  26.  
  27. public native void startMonitor();
  28. public native void stopMonitor();
  29.  
  30. public void show(int pressure){
  31. pb.setPressure(pressure);
  32. }
  33. }
  1. public class MyProgressBar extends View {
  2.  
  3. private int pressure;
  4. private int max;
  5. public MyProgressBar(Context context, AttributeSet attrs, int defStyle) {
  6. super(context, attrs, defStyle);
  7. // TODO Auto-generated constructor stub
  8. }
  9.  
  10. public MyProgressBar(Context context, AttributeSet attrs) {
  11. super(context, attrs);
  12. // TODO Auto-generated constructor stub
  13. }
  14.  
  15. public MyProgressBar(Context context) {
  16. super(context);
  17. // TODO Auto-generated constructor stub
  18. }
  19.  
  20. public void setPressure(int pressure) {
  21. this.pressure = pressure;
  22. //使当前视图无效,如果当前视图是可见的,那么onDraw会调用,只能在主线程使用
  23. // invalidate();
  24. postInvalidate();
  25. }
  26. public void setMax(int max) {
  27. this.max = max;
  28. }
  29. @Override
  30. protected void onDraw(Canvas canvas) {
  31.  
  32. Paint paint = new Paint();
  33.  
  34. if(pressure < 50){
  35. paint.setColor(Color.GREEN);
  36. }
  37. else if(pressure < 80){
  38. paint.setColor(0xffff8800);
  39. }
  40. else {
  41. paint.setColor(Color.RED);
  42.  
  43. }
  44.  
  45. canvas.drawRect(10, 10 + max - pressure, 30, 10 + max, paint);
  46. }
  47. }
  1. #include <jni.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. int getPressure(){
  6. //……监测电压……运算得到压力值
  7. ;
  8. }
  9.  
  10. int monitor;
  11. JNIEXPORT void JNICALL Java_com_itheima_monitor_MainActivity_startMonitor
  12. (JNIEnv * env, jobject obj){
  13. monitor = ;
  14. while(monitor){
  15. //获取锅炉压力
  16. int pressure = getPressure();
  17.  
  18. //jclass (*FindClass)(JNIEnv*, const char*);
  19. jclass clazz = (*env)->FindClass(env, "com/itheima/monitor/MainActivity");
  20. //jmethodID (*GetMethodID)(JNIEnv*, jclass, const char*, const char*);
  21. jmethodID methodId = (*env)->GetMethodID(env, clazz, "show", "(I)V");
  22. //void (*CallVoidMethod)(JNIEnv*, jobject, jmethodID, ...);
  23. (*env)->CallVoidMethod(env, obj, methodId, pressure);
  24. sleep();
  25. }
  26.  
  27. }
  28.  
  29. JNIEXPORT void JNICALL Java_com_itheima_monitor_MainActivity_stopMonitor
  30. (JNIEnv * env, jobject obj){
  31. monitor = ;
  32. }

Application.mk

  1. APP_ABI := armeabi x86

Android.mk

  1. LOCAL_PATH := $(call my-dir)
  2.  
  3. include $(CLEAR_VARS)
  4.  
  5. LOCAL_MODULE := hello
  6. LOCAL_SRC_FILES := hello.c
  7.  
  8. include $(BUILD_SHARED_LIBRARY)

【JNI】锅炉压力监测器的更多相关文章

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

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

  2. 05_锅炉压力案例_java实现

    最开始是有机顶盒,后来电视里面都带着一个安卓的设备.现在空调.冰箱.洗衣机都跃跃欲试地想把这个东西加上.海尔出了一款智能冰箱,就是在冰箱门上嵌了一个12寸的屏幕.这个屏幕实际上就是一个安卓的平板似的. ...

  3. android113 自定义进度条

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

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

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

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

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

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

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

  7. Android之SDK、NDK、JNI和so文件

    1.     SDK Android SDK(AndroidSoftware Development Kit),即Android软件开发工具包,Android的SDK基于Java实现,这意味着基于An ...

  8. 一天掌握Android JNI本地编程 快速入门

    一.JNI(Java Native Interface)        1.什么是JNI:               JNI(Java Native Interface):java本地开发接口   ...

  9. JNI/NDK开发

    公司的新需求终于解决完了,离测试和发布还有段时间,第一次体验了下没需求没bug的感觉,真是舒爽~然后翻了翻有什么可以学的.无意翻到了Android后期发展的五大趋势.一.性能优化.二.高级UI.三.J ...

随机推荐

  1. ASP.NET MVC学习笔记-----Bundles

    在网页中,我们经常需要引用大量的javascript和css文件,在加上许多javascript库都包含debug版和经过压缩的release版(比如jquery),不仅麻烦还很容易引起混乱,所以AS ...

  2. [转载]angularjs学习总结 详细教程

    http://blog.csdn.net/yy374864125/article/details/41349417#t75 目录(?)[-] 前言 AngularJS概述 AngularJS是什么 A ...

  3. codevs1080线段树练习

    题目描述 Description 一行N个方格,开始每个格子里都有一个整数.现在动态地提出一些问题和修改:提问的形式是求某一个特定的子区间[a,b]中所有元素的和:修改的规则是指定某一个格子x,加上或 ...

  4. Marriage Ceremonies(状态压缩dp)

     Marriage Ceremonies Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu ...

  5. HDU 4925 Apple Tree(模拟题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4925 解题报告:给你n*m的土地,现在对每一块土地有两种操作,最多只能在每块土地上进行两种操作,第一种 ...

  6. [Effective JavaScript 笔记]第48条:避免在枚举期间修改对象

    注册列表示例 一个社交网络有一组成员,每个成员有一个存储其朋友信息的注册列表. function Member(name){ this.name=name; this.friends=[]; } va ...

  7. ruby代码重构第二课

    (文章都是从我的个人主页上粘贴过来的, 大家也可以访问我的主页 www.iwangzheng.com) 在第一课里提取出了相通的代码,第二课里就把常量提取出来吧 一般把常量的定义写的对应的app/mo ...

  8. C#开发实例 鼠标篇

    鼠标的操作控制: 鼠标是计算机的一个重要组成部分,有很多默认的设置,如双击时间间隔,闪烁频率,移动速度等,本篇使用C#获取这些基本的信息. 1.1获取鼠标信息 ①实例001 获取鼠标双击时间间隔 主要 ...

  9. 粒子滤波particle filter和目标跟踪

    粒子滤波用于跟踪,参考:http://www.cnblogs.com/tornadomeet/archive/2012/03/18/2404817.html http://blog.csdn.net/ ...

  10. map遍历

    Set<Map.Entry<String,String>> ss = params.entrySet(); for(Map.Entry<String,String> ...