close

一、感測器(Sensor)

現今大部分的Android手機都有內建感測器,功用有測量動作、方向和環境狀況等等,以下將感測器分為三大類:

  1. 動作感測器(Motion sensors): 三方向加速和旋轉的測量
  • 加速規(accelerometers)
  • 重力感測器(gravity sensors)
  • 陀螺儀(gyroscopes)
  • 旋轉向量感測器(rotation vector sensors)
  1. 環境感測器(Environmental sensors): 溫度、氣壓、光照的測量
  • 氣壓計(barometer)
  • 光度計(photometers)
  • 溫度計(thermometer)
  1. 位置感測器(Position sensors): 物理位置的測量
  • 方向感測器(orientation sensors)
  • 磁力計(magnetometers)

 

二、感測器框架(Sensor Framework)

使用Android感測器框架可以取得感測器及感測器原始數據,框架包含以下類別(class)和接口(interface):

(Q.類別與介面有什麼差別?)

  1. SensorManager: 感測器服務的實例。提供各種方法來訪問和列出感測器、註冊和註銷感測器事件偵聽器以及獲取方向信息。此類還提供了幾個感測器常量,用於報告感測器精度、設置數據採集速率和校準感測器。
  2. Sensor: 傳感器的實例
  3. SensorEvent: 感測器事件對象,該對象提供有關感測器事件的信息
  4. SensorEventListener: 可以使用此接口創建兩個回調方法,在感測器值更改或感測器精度更改時接收通知

下圖為感測器程式的基本架構

Sensor_template.png

 

三、JAVAC++的繼承

JAVAC++有幾個重要的差異,其中之一就是JAVA不支援多重繼承,因為C++為了多重繼承搞了一堆機制有些複雜(如虛擬繼承 ...),所以JAVA只能單一繼承一個類別(class)但可以實現多個介面(interface)

上面程式碼中第一行就是啦,extends後面跟著的是父類別,implements後面跟著的是interface,多於一個interface要實現時,interface間用逗號分開即可

extendsimplements間那個逗號也可以不要

 

四、實作1 – 感測器數值讀取

取出加速規(accelerometers)、陀螺儀(gyroscopes)和磁力計(magnetometers)的資料並放到TextView顯示

此三種感測器都各有xyz三方向。三方向如下圖所示:

  1. 新增專案,稱設為: CH3_學號_SensorActivity
    1-1.png
  2. 顯示介面的編輯(activity_main.xml)

新增多個TextView顯示感測器名稱以及xyz軸數值

1-2-1.png

以下為參考程式,每個元件的id需要不一樣
https://imgur.com/a/aFd8biZ

1-2-2.png

  1. 在主程式取得TextView元件(MainActivity.java)
    1-3.png
  2. 完成Sensor基本架構
    1-4.png
  3. 註冊監聽事件以及取消監聽
    避免程式沒有在畫面上的時候持續吃掉電量以及效能,需要在
    onPause()時取消監聽
    1-5.png
  4. 顯示數值於TextView
    1-6.png
  5. 結果
    1-7.png
  6. 參考程式
    https://imgur.com/a/pbEtU8o

    1-8.png

 

五、實作2 – 水平儀

利用加速規的xyz加速度計算出pitchroll來製作水平儀

  1. 新增專案,名稱設為: CH3_學號_SpiritLevel
    2-1.png
  2. 鎖定螢幕方向(AndroidManifest.xml)
    2-2.png
  3. 顯示介面的編輯(activity_main.xml)

新增多個TextView顯示加速規數值以及計算的pitch & roll

新增兩個ImageView,一個固定中央一個移動響應用,透明度設為50%以便觀察重疊
2-3-1.png

以下為參考程式,布局為RelativeLayout
https://imgur.com/a/cs1rfm3


2-3-2.png

  1. 同實作1取得元件以及完成基本架構
  2. 新增計算pitch & roll的函式
    2-5.png
  3. 新增移動圖片的函式
    pitch & roll作為因子去移動圖片的x, y座標
    公式記得考慮圖片寬高以及超出布局邊緣的情況以下為參考程式2-6.png
  4. 顯示數值於TextView及移動圖片
    2-7.png
  5. 結果

    2-8-1.png2-8-2.png

  6. 參考程式
    https://imgur.com/a/PrNuZp2

    2-9.png

 

參考

https://developer.android.com/docs

arrow
arrow
    文章標籤
    課程講義 Android Studio
    全站熱搜

    ntougpslab 發表在 痞客邦 留言(0) 人氣()