日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JNI开发之锅炉压力监控器

發布時間:2025/6/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JNI开发之锅炉压力监控器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這個例子主要是演示了JNI在實際開發中的開發流程。在實際開發中,android工程師只需要從C/C++工程師那里

拿到底層的一些邏輯代碼,整合到jni目錄下的.c文件即可


代碼的鏈接地址:http://download.csdn.net/detail/caihongshijie6/6651355

一、原理圖



二、效果圖




三、代碼實現

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);??
  • ????}??
  • ??????
  • ????/**?
  • ?????*?android下所有的view控件的顯示其實都是通過onDraw()?
  • ?????*?canvas?代表的是屏幕的畫布...?
  • ?????*/??
  • ????@Override??
  • ????protected?void?onDraw(Canvas?canvas)?{??
  • ??????????
  • ????????//bottom值?需要根據鍋爐的壓力?動態確定??
  • ????????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);//****這里需要注意,這時不再是通過.xml文件來畫界面??
  • ????????????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);??
  • ??????????????????
  • ????????????????//把壓力顯示到UI界面上??
  • ????????????????Message?msg?=?new?Message();??
  • ????????????????msg.obj?=?pressure;??
  • ????????????????handler.sendMessage(msg);??
  • ????????????}??
  • ????????};??
  • ??????????
  • ????????timer.schedule(task,?1000,2000);??
  • ????}??
  • ??
  • ????/**??
  • ?????*?根據鍋爐壓力,獲取應該顯示的顏色??
  • ?????*?@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)?{??
  • ????????//?Inflate?the?menu;?this?adds?items?to?the?action?bar?if?it?is?present.??
  • ????????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這個目錄??
  • #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__)??
  • ??
  • /**?
  • ?*?getpressure()的代碼由C/C++工程師提供?
  • ?*/??
  • int?getpressure(){??
  • ??//?c語言中的隨機數??
  • ????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、在此過程中需要用到的命令請參考上一篇博客。。。。


    總結

    以上是生活随笔為你收集整理的JNI开发之锅炉压力监控器的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。