码迷,mamicode.com
首页 > 其他好文 > 详细

【JNI】锅炉压力监测器

时间:2016-06-11 15:50:15      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:

 

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(){
    //……监测电压……运算得到压力值
    return rand() % 101;
}

int monitor;
JNIEXPORT void JNICALL Java_com_itheima_monitor_MainActivity_startMonitor
  (JNIEnv * env, jobject obj){
    monitor = 1;
    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(1);
    }

}


JNIEXPORT void JNICALL Java_com_itheima_monitor_MainActivity_stopMonitor
 (JNIEnv * env, jobject obj){
    monitor = 0;
}

 

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】锅炉压力监测器

标签:

原文地址:http://www.cnblogs.com/anni-qianqian/p/5575350.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!