生活随笔
收集整理的這篇文章主要介紹了
JNI开发之锅炉压力监控器
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
這個(gè)例子主要是演示了JNI在實(shí)際開發(fā)中的開發(fā)流程。在實(shí)際開發(fā)中,android工程師只需要從C/C++工程師那里
拿到底層的一些邏輯代碼,整合到j(luò)ni目錄下的.c文件即可
代碼的鏈接地址:http://download.csdn.net/detail/caihongshijie6/6651355
一、原理圖
二、效果圖
三、代碼實(shí)現(xiàn)
1、MyView
[java]?view plaincopyprint?
package?com.njupt.monitor;?? ?? import?android.content.Context;?? import?android.graphics.Canvas;?? import?android.graphics.Paint;?? import?android.view.View;?? ?? public?class?MyView?extends?View?{?? ?? ????private?int?bottom;?? ????private?Paint?paint;?? ?????? ????public?MyView(Context?context,int?bottom,int?color)?{?? ????????super(context);?? ?????????? ????????this.bottom?=?bottom;?? ????????paint?=?new?Paint();?? ????????paint.setColor(color);?? ????????paint.setStrokeWidth(10);?? ????}?? ?????? ????? ? ? ?? ????@Override?? ????protected?void?onDraw(Canvas?canvas)?{?? ?????????? ?????????? ????????canvas.drawRect(20,?20,30,bottom,paint);?? ????????super.onDraw(canvas);?? ????}?? ?? ?????? }??
2、MainActivity
[java]?view plaincopyprint?
package?com.njupt.monitor;?? ?? import?java.util.Timer;?? import?java.util.TimerTask;?? ?? import?android.os.Bundle;?? import?android.os.Handler;?? import?android.os.Message;?? import?android.app.Activity;?? import?android.graphics.Color;?? import?android.view.Menu;?? import?android.widget.TextView;?? ?? public?class?MainActivity?extends?Activity?{?? ?? ????public?native?int?getPressure();?? ????private?Timer?timer;?? ????private?TimerTask?task;?? ????private?Handler?handler?=?new?Handler(){?? ????????public?void?handleMessage(android.os.Message?msg)?{?? ????????????int?pressure?=?(Integer)?msg.obj;?? ????????????int?color?=?getColor(pressure);?? ????????????if(color?==?404){?? ????????????????TextView?tv?=?new?TextView(MainActivity.this);?? ????????????????tv.setTextColor(Color.RED);?? ????????????????tv.setTextSize(30);?? ????????????????tv.setText("鍋爐快爆炸了...快跑吧~~~~~");?? ?????????????????? ?????????????????? ????????????????setContentView(tv);?? ????????????????timer.cancel();?? ?????????????????? ????????????????return?;?? ????????????}?? ?????????????? ?????????????? ????????????MyView?myView?=?new?MyView(MainActivity.this,?pressure,?color);?? ????????????setContentView(myView);?? ????????????super.handleMessage(msg);?? ????????};?? ????};?? ?????? ?????? ????static{?? ????????System.loadLibrary("Hello");?? ????}?? ?????? ?????? ????@Override?? ????protected?void?onCreate(Bundle?savedInstanceState)?{?? ????????super.onCreate(savedInstanceState);?? ?????????? ????????timer?=?new?Timer();?? ????????task?=?new?TimerTask()?{?? ?????????????? ????????????@Override?? ????????????public?void?run()?{?? ????????????????int?pressure?=?getPressure()%300;?? ????????????????System.out.println("壓力:?"?+?pressure);?? ?????????????????? ?????????????????? ????????????????Message?msg?=?new?Message();?? ????????????????msg.obj?=?pressure;?? ????????????????handler.sendMessage(msg);?? ????????????}?? ????????};?? ?????????? ????????timer.schedule(task,?1000,2000);?? ????}?? ?? ????/**?? ?????*?根據(jù)鍋爐壓力,獲取應(yīng)該顯示的顏色?? ?????*?@param?pressure?? ?????*?@return?? ?????*/?? ????public?int?getColor(int?pressure){?? ????????if(pressure?<?100){?? ????????????return?Color.GREEN;?? ????????}else?if(pressure?<?200){?? ????????????return?Color.YELLOW;?? ????????}else?if(pressure?<?260){?? ????????????return?Color.RED;?? ????????}else{?? ????????????return?404;?? ????????}?? ????}?? ????@Override?? ????public?boolean?onCreateOptionsMenu(Menu?menu)?{?? ?????????? ????????getMenuInflater().inflate(R.menu.main,?menu);?? ????????return?true;?? ????}?? ?? }??
3、Hello.c
[cpp]?view plaincopyprint?
#include?<stdio.h>?? #include?<jni.h>?? #include?<stdlib.h>?? #include?"com_njupt_monitor_MainActivity.h"?? ?? #include?<android/log.h>//include??D:\android-ndk-r7b\platforms\android-8\arch-arm\usr\include\android下的log.h這個(gè)目錄?? #define?LOG_TAG?"System.out"?? #define?LOGD(...)?__android_log_print(ANDROID_LOG_DEBUG,?LOG_TAG,?__VA_ARGS__)?? #define?LOGI(...)?__android_log_print(ANDROID_LOG_INFO,?LOG_TAG,?__VA_ARGS__)?? ?? ? ? ?? int?getpressure(){?? ???? ????return?rand();?? }?? ?? JNIEXPORT?jint?JNICALL?Java_com_njupt_monitor_MainActivity_getPressure?? ??(JNIEnv?*?env,?jobject?obj){?? ????return?getpressure();?? }??
4、Android.mk
[cpp]?view plaincopyprint?
LOCAL_PATH?:=?$(call?my-dir)?? ?? ??include?$(CLEAR_VARS)?? ?? ??LOCAL_MODULE????:=?Hello????? ??LOCAL_SRC_FILES?:=?Hello.c?? ??LOCAL_LDLIBS?+=?-llog?? ???? ??include?$(BUILD_SHARED_LIBRARY)??
5、在此過(guò)程中需要用到的命令請(qǐng)參考上一篇博客。。。。
總結(jié)
以上是生活随笔為你收集整理的JNI开发之锅炉压力监控器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。