【JNI】锅炉压力监测器
public class MainActivity extends Activity { private MyProgressBar pb; static{ System.loadLibrary("hello"); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); pb = (MyProgressBar) findViewById(R.id.pb); pb.setMax(100); } public void start(View v){ new Thread(){ public void run() { startMonitor(); }; }.start(); } public void stop(View v){ stopMonitor(); } public native void startMonitor(); public native void stopMonitor(); public void show(int pressure){ pb.setPressure(pressure); } }
public class MyProgressBar extends View { private int pressure; private int max; public MyProgressBar(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); // TODO Auto-generated constructor stub } public MyProgressBar(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub } public MyProgressBar(Context context) { super(context); // TODO Auto-generated constructor stub } public void setPressure(int pressure) { this.pressure = pressure; //使当前视图无效,如果当前视图是可见的,那么onDraw会调用,只能在主线程使用 // invalidate(); postInvalidate(); } public void setMax(int max) { this.max = max; } @Override protected void onDraw(Canvas canvas) { Paint paint = new Paint(); if(pressure < 50){ paint.setColor(Color.GREEN); } else if(pressure < 80){ paint.setColor(0xffff8800); } else { paint.setColor(Color.RED); } canvas.drawRect(10, 10 + max - pressure, 30, 10 + max, paint); } }
#include <jni.h> #include <stdio.h> #include <stdlib.h> int getPressure(){ //……监测电压……运算得到压力值 ; } int monitor; JNIEXPORT void JNICALL Java_com_itheima_monitor_MainActivity_startMonitor (JNIEnv * env, jobject obj){ monitor = ; while(monitor){ //获取锅炉压力 int pressure = getPressure(); //jclass (*FindClass)(JNIEnv*, const char*); jclass clazz = (*env)->FindClass(env, "com/itheima/monitor/MainActivity"); //jmethodID (*GetMethodID)(JNIEnv*, jclass, const char*, const char*); jmethodID methodId = (*env)->GetMethodID(env, clazz, "show", "(I)V"); //void (*CallVoidMethod)(JNIEnv*, jobject, jmethodID, ...); (*env)->CallVoidMethod(env, obj, methodId, pressure); sleep(); } } JNIEXPORT void JNICALL Java_com_itheima_monitor_MainActivity_stopMonitor (JNIEnv * env, jobject obj){ monitor = ; }
Application.mk
APP_ABI := armeabi x86
Android.mk
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := hello LOCAL_SRC_FILES := hello.c include $(BUILD_SHARED_LIBRARY)
【JNI】锅炉压力监测器的更多相关文章
- 06_锅炉压力案例_progressbar实现
相关的native方法可以用javah来生成一个头文件.拿着这个的MainActivity,用它来生成一个头文件. Signature是当前这个方法的方法签名.() V全空参数返回的是void. /* ...
- 05_锅炉压力案例_java实现
最开始是有机顶盒,后来电视里面都带着一个安卓的设备.现在空调.冰箱.洗衣机都跃跃欲试地想把这个东西加上.海尔出了一款智能冰箱,就是在冰箱门上嵌了一个12寸的屏幕.这个屏幕实际上就是一个安卓的平板似的. ...
- android113 自定义进度条
MainActivity: package com.itheima.monitor; import android.os.Bundle; import android.app.Activity; im ...
- js地址下拉列表中全职工作
/******************************************************************* *输出全国各省辖市下拉列表项writeCitys() *输出企 ...
- C# 历史曲线控件 基于时间的曲线控件 可交互的高级曲线控件 HslControls曲线控件使用教程
本篇博客主要对 HslControls 中的曲线控件做一个详细的教程说明,大家可以根据下面的教程开发出高质量的曲线控件 Prepare 先从nuget下载到组件,然后就可以使用组件里的各种组件信息了. ...
- C#事件和委托(C#学习笔记03)
委托 1. C# 中的委托类似于 C 或 C++ 中指向函数的指针.委托表示引用某个方法的引用类型变量,运行时可以更改引用对象. 2. 特别地,委托可以用于处理事件或回调函数.并且,所有的委托类都是从 ...
- Android之SDK、NDK、JNI和so文件
1. SDK Android SDK(AndroidSoftware Development Kit),即Android软件开发工具包,Android的SDK基于Java实现,这意味着基于An ...
- 一天掌握Android JNI本地编程 快速入门
一.JNI(Java Native Interface) 1.什么是JNI: JNI(Java Native Interface):java本地开发接口 ...
- JNI/NDK开发
公司的新需求终于解决完了,离测试和发布还有段时间,第一次体验了下没需求没bug的感觉,真是舒爽~然后翻了翻有什么可以学的.无意翻到了Android后期发展的五大趋势.一.性能优化.二.高级UI.三.J ...
随机推荐
- 转:Java NIO系列教程(七) Socket Channel
Java NIO中的SocketChannel是一个连接到TCP网络套接字的通道.可以通过以下2种方式创建SocketChannel: 打开一个SocketChannel并连接到互联网上的某台服务器. ...
- [Angularjs]ng-file-upload上传文件
写在前面 最近在弄文档库的H5版,就查找了下相关的上传组件,发现了ng-upload的东东,推荐给大家. 系列文章 [Angularjs]ng-select和ng-options [Angularjs ...
- wireshark基本用法及过虑规则
wireshark基本用法及过虑规则 标签: wireshark基本语法wireshark使用方法wireshark包过虑规则 2015-02-03 18:44 10711人阅读 评论(0) 收藏 ...
- HDOJ 1083 Courses
Hopcroft-Karp算法模板 Courses Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (J ...
- Merge Sort
#include<stdlib.h> #include<stdio.h> void Merge( int source[] , int temp[] , int start , ...
- Powershell学习之道-文件夹共享及磁盘映射
导读 在Linux环境下,我们很轻易就能得心应手地通过命令操作一切事物,在Windows下,Powershell也算是后起之秀,提供大量的cmdlet以及c#的横向拓展.下面将由小编带领大家通过Pow ...
- hrb 2134 素数
分拆素数和 Time Limit: 1000 MS Memory Limit: 32768 K Total Submit: 176(99 users) Total Accepted: 106(93 u ...
- 【OpenStack】OpenStack系列6之Sheepdog环境搭建
准备 repo配置 yum clean all yum makecache yum install -y make automake autoconf gcc nss-devel wget git g ...
- 【转】Oracle数据库中Sequence的用法
在Oracle数据库中,sequence等同于序列号,每次取的时候sequence会自动增加,一般会作用于需要按序列号排序的地方. 1.Create Sequence (注释:你需要有CREATE S ...
- 30.赋值运算符重载函数[Assign copy constructor]
[问题] 给出如下CMyString的声明,要求为该类型添加赋值运算符函数. C++ Code 1234567891011 class CMyString { public: CMyS ...