Nt Network Optimization i Lab Department of Computer Science National Chiao Tung University 前言 Android phone 和 sensor 的結合, 讓 Android phone 產生了更多的應用, 讓手機程式開發者可以朝向更多方面的發展, 不管是遊戲方面的應用, 抑或是行為偵測程式的開發, 都可藉由 sensor data 的分析, 實作出性能優良的程式.
課程大綱 Introduction (Sensor in android development) Sensor type Public methods Sensor on HTC Hero 2.1( 實作 ) Sensors on Hero 2.1 The value of sensor Accelerometer Magnetic orientation PTS( 實作 ) Stepping Stride length Wlki Walking direction i
Introduction (Sensor in android development) Sensor type Accelerometer( 加速度感測器 ) : 量測手機所受到的三軸加速度 Magnetic ( 磁力感測器 ): 量測手機本身所受到的重力磁場值 Orientation ( 方向感測器 ) : 量測手機的方向 Gyroscope ( 陀螺儀感測器 ) : 量測手機本身的旋轉 Pressure ( 壓力感測器 ): 偵測壓力 Proximity ( 接近感測器 ): 偵測是否有物體接近 Temperature ( 溫度感測器 ): 偵測溫度 Light( 光感測器 ): 偵測光度
Public methods getmaximumrange () : maximum range of the sensor in the sensor's unit getname() : name string of the sensor getpower() : the power in ma used by this sensor while in use getresolution() : resolution of the sensor in the sensor's unit gettype() : generic type of this sensor getvendor() : vendor string ti of this sensor getversion() : version of the sensor's module
手機上的 sensor Sensor on HTC Hero 2.1 Sensors on Hero 2.1 : 手機上面有哪些感測器?
Sensor list 呼叫 getsystemservice 取得一個 SensorManager 物件 呼叫 SensorManager 物件的 getsensorlist 方法取得 Sensor 物件 Sensor. TYPE_ALL 代表所有種類的感測器都要取得
讀取 Sensor 的資料 SensorReader 首先, 請先新增一個 SensorReader.java 檔 SensorList 資料夾 > Src 資料夾 > com.android. sensorlist > 右鍵
修改 Androidmanifest.xml, 新增 Activity 修改 sensorlist.java, 新增 intent 呼叫 readersensor.java
Sensorlist.java new an Intent, 來達到 Activity 之間的訊息傳遞 當使用者點選某個感測器後, 會將感測器的型別夾帶在 Intent 裡傳送給 SensorReader.java 修改 SensorReader.java
SensorReader.java 利用 getdefaultsensor 取得該種類的 Sensor 物件 registerlistener 註冊 Sensor 的 listener unregisterlistener 註銷 Sensor 的 listener SensorEventListener 讀取感測器的資料, 可以分成兩種方式 onaccuracychanged: 當量測值的精準度改變時, 這個方法會被呼叫 onsensorchanged: 當量測值改變時, 這個方法會被呼叫
Sensor s values Accelerometer Value[0] : X 方向加速度變化量 Value[1] : Y 方向加速度變化量 Value[2] : Z 方向加速度變化量 Magnetic Value[0] : X 方向磁力變化量 Value[1] []:Y 方向磁力變化量 Value[2] : Z 方向磁力變化量 Orientation Value[0] : 方向角 (0~359) 北 :0, 東 :90, 南 :180, 西 :270 Value[1] : 縱向旋轉角 ( 180~180) 類似 Pitch Value[2] : 橫向旋轉角 ( 90~90) 類似 Roll Accuracy Sensor data 的精準度 (1~3)
PTS 實作 UI 設計 Pts.java Service.java 計步器實作 計算步距 方向判斷 UI 設計 此圖用了什麼物件?? ANS: TextView
練習一 請各位新增一個 TextView 的 layout 物件 Id 自訂 Size 為 30 Text 自訂 將 Text 顯示在中間部分
Pts.java activity(foreground) 增加 menu 控制程式的執行 利用 Runnable 定時執行 push,cal_g0 和 walking_judge 最後輸出 Step counter Stride length Walking direction 新增 menu oncreateoptionsmenu 方法 public abstract bt t MenuItem add (int groupid, intitemid, int order, int titleres) Ex : menu.add(0,1,0, 0 Rstringstart) R.string.start) MENU.NONE=0 onoptionsitemselected 方法 擷取 itemid, 判斷該做什麼事
練習二 偵測 menu click 事件 判斷 click item 顯示相關訊息在練習一所作之 TextView
Runnable 建立 Handler 物件, 做為執行緒傳遞 postdelayed 用 Ex: private Handler push = new Handler 呼叫 Handler.postDelayed l d 方法跑 mtasks 執行緒 Ex: push.postdelayed(mtasks, 1000); mtasks 為 Runnable 物件, 作為 Timer Ex: private Runnable mtasks= new Runnable() { }; public void run() { } // 輸入你要做的事 push.postdelayed(mtasks, 1000;
Push() 擷取 sensor data Low-pass filter 方向輸出
Cal_G0 練習三 輸出 G0 值給 layout 的 TextView 觀察 G0 值是否有誤 利用練習一的 TextView 亦可新增 TextView
Walking _ judge Index 不在判斷範圍內 找 max 計算速度變化, 並求出位移
通過所有條件, 做輸出的更新 附註 程式可以改成在 background 執行 ( 實作 Service) low pass filter 可減少資料的不規則變動 Android 上的 sensor, 頻率不固定, 可用 Handler 加強 方向部分, 也可以利用 Magnetic sensor data 實作 此程式為簡易版本, 準確度不確定有多高
Thank you!!