感測器讓你的應用程式知道裝置與周遭物理世界之間的關係。 感測器可以讓你的應用程式得知裝置的方向、方位和移動。 這些感應器能透過獨特的輸入方式,幫助你的遊戲、擴增實境應用程式或工具應用程式更具實用性和互動性,例如利用裝置的動作排列螢幕上的角色,或模擬駕駛艙中並以裝置作為方向盤。
一般來說,從一開始就決定你的應用程式是否完全依賴感測器,還是感測器只是額外的控制機制。 例如,一款使用裝置作為虛擬方向盤的駕駛遊戲,也可以透過螢幕上的圖形介面來控制——這樣一來,應用程式就能不受系統上感測器影響。 另一方面,彈珠傾斜迷宮可以被編碼成只在擁有適當感測器的系統上運作。 你必須做出策略性選擇,是否完全依賴感測器。 請注意,滑鼠/觸控操作方式會犧牲沉浸感,換取更高的控制感。
| 主題 | Description |
|---|---|
| 校正感測器 | 基於磁力計的裝置中的感測器——羅盤、傾斜儀和方位感測器——因環境因素而可能需要校正。 MagnetometerAccuracy 的列舉功能可以幫助你判斷裝置需要校正時的應對方案。 |
| 感測器方向 | 來自 OrientationSensor 類別的感測器資料,皆由其參考軸定義。 這些軸線由裝置的橫向方向定義,隨著使用者旋轉裝置而旋轉。 |
| 用加速度計 | 學習如何使用加速度計來回應使用者的動作。 |
| 用指南針 | 學習如何使用羅盤來判斷當前航向。 |
| 使用陀螺儀 | 學習如何使用陀螺儀偵測使用者動作的變化。 |
| 使用傾斜儀 | 了解如何使用傾斜計測定俯仰、滾轉和偏航。 |
| 使用光感應器 | 學習如何使用環境光感測器來偵測光線變化。 |
| 使用方向感測器 | 學習如何使用方向感測器來判斷裝置的方向。 |
感測器批次處理
有些感測器支援批次處理的概念。 這會依個別感測器而異。 當感測器實作批次處理時,會在指定時間區間內收集多個資料點,然後一次傳輸所有資料。 這與一般行為不同,後者的感測器在讀取後立即回報結果。 請考慮以下圖表,顯示資料如何被收集並交付,先是正常傳送,接著是批次交付。
感測器批次處理的主要優點是延長電池續航力。 當資料沒有立即傳送時,可以節省處理器資源,避免資料需要立即處理。 系統的部分可以休眠直到需要,這能帶來顯著的省電效果。
你可以透過調整延遲來影響感測器發送批次的頻率。 例如,Accelerometer 感測器具有 ReportLatency 特性。 當此屬性被設定為應用時,感測器會在指定時間後傳送資料。 你可以透過設定 ReportInterval 屬性來控制在特定延遲內累積的資料量。
關於設定延遲,有幾個注意事項需要注意。 第一點要注意的是,每個感測器根據其本身的能力,都有其可支援的 MaxBatchSize。 這是感測器在被迫傳送事件前,能夠快取的事件數量。 如果你將 MaxBatchSize 乘以 ReportInterval,就會決定最大的 ReportLatency 值。 如果你指定比這個更高的值,會使用最大延遲值,以避免資料遺失。 此外,多個應用程式可以各自設定期望的延遲。 為了滿足所有應用的需求,將採用最短的延遲週期。 基於這些事實,你在應用程式中設定的延遲可能與觀察到的延遲不符。
若感測器使用批次報告,呼叫 GetCurrentReading 會清除目前批次資料並開始新的延遲期。
加速度計
Accelerometer感測器可測量裝置X、Y、Z軸的G力值,非常適合簡單的動作應用。 請注意,G力值包含重力加速度。 如果裝置平放在桌面上,且其 SimpleOrientation 為 FaceUp,則加速度計會在 Z 軸測得 -1 G。 因此,加速度計不一定僅測量座標加速度——速度變化率。 使用加速度計時,務必區分由重力產生的重力向量,以及由運動產生的線性加速度向量。 請注意,對於靜止裝置,重力向量應該歸一化為1。
以下圖表說明:
- V1 = 向量 1 = 重力作用力
- V2 = 向量 2 = 裝置機身的 -Z 軸(從螢幕背面向外指)
- Θi = 傾斜角(傾角)= 裝置底盤 –Z 軸與重力向量之間的夾角
可能使用加速度計感測器的應用程式包括一個遊戲,螢幕上的彈珠會隨著你傾斜裝置的方向滾動(重力向量)。 這類功能與傾斜計非常相似,且可透過俯仰與側傾結合實現。 使用加速度計的重力向量可以簡化此過程,提供一個易於數學操作的裝置傾斜向量。 另一個例子是,當使用者在空中快速甩動裝置時,會發出鞭子劈啪聲的應用程式(線性加速度向量)。
範例實作請參見 「使用加速度計」。
活動感測器
Activity感測器會判斷連接感測器的裝置目前狀態。 此感測器常用於健身應用,以追蹤攜帶裝置使用者何時跑步或行走。 請參閱 ActivityType 以了解此感測器 API 可能偵測的活動清單。
範例實作請參見 activity sensor 範例。
高度計
高度計感測器回傳感測器高度的值。 這讓你能以海平面的公尺數來追蹤高度變化。 一個可能使用這功能的應用程式範例是跑步應用程式,它會追蹤跑步時的海拔變化,以計算燃燒的卡路里。 此時,感測器資料可與Activity感測器結合,以提供更精確的追蹤資訊。
範例實作請參見 altimeter 樣本。
氣壓計
氣壓計感測器使應用程式能取得氣壓讀數。 氣象應用可利用這些資訊提供當前大氣壓力。 這可以用來提供更詳細的資訊並預測潛在的天氣變化。
關於範例實作,請參見 氣壓計樣本。
指南針
Compass感測器會根據地球的水平面,回傳相對於磁北的二維航向。 羅盤感測器不應用於判斷特定裝置的方向或在三維空間中表示任何事物。 地理因素可能使航向產生自然磁偏角,因此部分系統同時支援 HeadingMagneticNorth 與 HeadingTrueNorth。 思考你的應用程式偏好哪一種,但要記得並非所有系統都會回報真北值。 陀螺儀與磁力計(測量磁強強度的裝置)感測器會將數據合併產生羅盤方位,從而穩定數據(磁場強度因電氣系統元件而非常不穩定)。
想要顯示羅盤玫瑰或導航地圖的應用程式通常會使用羅盤感測器。
關於範例實作,請參見 「使用指南針」。
陀螺儀
陀螺儀感測器測量X軸、Y軸和Z軸的角速度。 這些在簡單的動態應用程式中非常有用,這些應用程式不在意裝置方向,而是關心裝置旋轉速度的不同。 陀螺儀的資料中可能含有雜訊,或在一個或多個軸上存在固定偏差。 你應該查詢加速度計,確認裝置是否在移動,以判斷陀螺儀是否有偏壓,然後在應用程式中相應補償。
可使用陀螺儀感測器的應用程式之一,是一種藉由快速猛然轉動裝置來讓輪盤旋轉的遊戲。
範例實作請參見 「使用陀螺儀」。
傾角儀
傾斜計感測器能指定裝置的偏航、俯仰與側傾值,並最適合在意裝置在空間中定位的應用程式。 俯仰與滾轉是根據加速度計測得的重力向量,以及對陀螺儀資料進行積分而得。 偏航是由磁力計和陀螺儀的資料所確定的(類似指南針的航向角)。 傾角儀以易於理解的方式提供先進的方位資料。 需要裝置方向但不需要操作感測器資料時,使用傾斜儀。
只要應用程式能根據裝置的方向調整視角,就能使用傾斜感測器。 此外,顯示一架其姿態與裝置偏航、俯仰和滾轉一致的飛機之應用程式,也會使用傾角計讀數。
關於實作範例,請參見 「使用傾斜計」。
光感應器
LightSensor感測器能判斷感測器周圍的環境光。 這讓應用程式能判斷裝置周圍的光線設定何時改變。 例如,使用平板裝置的使用者可能在晴天從室內走到室外。 智慧應用程式可以利用此值增加背景與被渲染字體之間的對比度。 那樣會使內容在較明亮的戶外環境中仍然清晰可讀。
範例實作請參見 「使用光感測器」。
方向感測器
裝置方向同時透過四元數與旋轉矩陣來表示。 OrientationSensor 提供高度精確度,能精確判定裝置在空間中相對於絕對航向的位置。 OrientationSensor 的數據來自加速度計、陀螺儀和磁力計。 因此,傾斜儀與羅盤感測器皆可由四元數值推導出。 四元數與旋轉矩陣非常適合進行進階數學運算,且常用於圖形化程式設計。 使用複雜操作的應用程式應偏好方向感測器,因為許多轉換基於四元數與旋轉矩陣。
方向感測器常用於先進的擴增實境應用程式,這些應用程式會根據裝置背面指向的方向在周遭環境上繪製疊加層。
範例實作請參見 「使用方向感測器」。
計步器
Pedometer感應器會記錄使用者攜帶連接裝置時所走的步數。 感測器設定為在特定時間內追蹤步數。 許多健身應用程式喜歡記錄採取的步驟數量,以幫助使用者設定並達成各種目標。 這些資訊可以被收集並儲存,以顯示隨時間的進展。
範例實作請參見 pedometer 樣本。
近接感測器
Proximity感測器可用來指示感測器是否偵測到物體。 除了判斷物體是否在裝置範圍內外,接近感測器也能判斷與偵測物體的距離。 一個例子是應用程式想在使用者進入指定範圍內時從休眠狀態中甦醒。 裝置可能處於低功耗睡眠狀態,直到接近感測器偵測到物體,然後才可能進入較活躍的狀態。
範例實作請參見 接近感測器範例。
簡易導覽
SimpleOrientationSensor 偵測指定裝置的當前象限方向,或其正面朝上或背面朝下。 它有六種可能的SimpleOrientation狀態(NotRotated、Rotated90、Rotated180、Rotated270、FaceUp、FaceDown)。
一個讀取器應用程式會根據裝置與地面平行或垂直的角度來改變顯示,會利用 SimpleOrientationSensor 的數值來判斷裝置的持有方式。
關於範例實作,請參見 simple orientation sensor 範例。