編輯:關於Android編程
本節學習使用C語言調用JAVA語言。在生活中比如我們某些底層的硬件必須使用C語言去編寫,當C語言返回的某些數值顯示在界面上時,就比如使用JNI。這樣可以將C返回的值顯示在界面上。
本節模擬傳感器返回的值,通過進度條顯示靈敏度,然後顯示到界面上。
1:界面布局就補多說了。裡面就2個Button,一個用於開啟監控,一個用於關閉監控,一個進度條
2:Activity代碼如下:
//開始監控button public void start(View v) { startMonitor(); } //停止監控button public void stop(View v) { stopMonitor(); } //開始監控和停止監控的本地方法 public native void startMonitor(); public native void stopMonitor(); //c語言調用java的刷新進度條函數 public void showValue(int progress) { bar.setProgress(progress); }3:本地JNI代碼
#include#include #include int monitor = 1; //隨機產生的值 int getPressure() { return rand()%100; } /* * Class: com_demo_ccalljava_MainActivity * Method: startMonitor * Signature: ()V */ JNIEXPORT void JNICALL Java_com_demo_ccalljava_MainActivity_startMonitor (JNIEnv *env, jobject obj) { while(monitor) { //獲取當前的壓力值 int value = getPressure(); //利用反射找打show方法 //1:找到字節碼文件 jclass cClass = (*env)->FindClass(env, com/demo/ccalljava/MainActivity); //2:找到方法id //show是調用java方法的名字, (I)V是該方法的簽名 jmethodID methodID = (*env)->GetMethodID(env,cClass, showValue, (I)V); //3:調用方法 (*env)->CallVoidMethod(env, obj, methodID, value); sleep(1); } } /* * Class: com_demo_ccalljava_MainActivity * Method: stopMonitor * Signature: ()V */ JNIEXPORT void JNICALL Java_com_demo_ccalljava_MainActivity_stopMonitor (JNIEnv *env , jobject obj) { monitor = 0; }
static { System.loadLibrary(CCallJava); }4:開始監控顯示:
當按下開始後,出現了卡死GUI,這是因為startMonitor是跑在主線程的,所以卡住GUI
5:修改,startMonitor運行在子線程
//開始監控button public void start(View v) { Thread thread = new Thread() { @Override public void run() { startMonitor(); } }; thread.start(); }
可以正常顯示。
現在開發Android程序基本都已經從Eclipse轉到了Android Studio了, 最近項目需求, 需要用到ndk編程, 於是就折騰了一下。開發環境Android
Android中鍵盤輸入是用戶輸入交互的最常用最直接的手段,關於鍵盤輸入,有幾點可以提高用戶使用體驗。第一:彈出鍵盤整體頁面上移,使鍵盤不遮擋控件,需要在AndroidM
公司項目需要做推送,我們選擇用小米推送,經過一段時間的摸索,終於可以簡單的使用小米推送了。1.創建賬號登入後 登入後選擇消息推送:2.進入後創建項目,按照步驟創建完後如下
在web頁面中,有a標簽的超鏈接實現跳轉,同樣在Android當中,用TextView控件來顯示文字,實現它的事件來跳轉。用過微博Android手機端的朋友的都知道微博正