做自(zì)由與創造的先行者

Android傳感器概覽

Android開(kāi)發手冊

大(dà)多數 Android 設備都有内置傳感器,用(yòng)來(lái)測量運動、屏幕方向和(hé)各種環境條件。這(zhè)些(xiē)傳感器能(néng)夠提供高(gāo)度精确的原始數據,非常适合用(yòng)來(lái)監測設備的三維移動或定位,或監測設備周圍環境的變化。例如,遊戲可以跟蹤設備重力傳感器的讀數,以推斷出複雜(zá)的用(yòng)戶手勢和(hé)動作(zuò),如傾斜、搖晃、旋轉或揮動。同樣,天氣應用(yòng)可以使用(yòng)設備的溫度傳感器和(hé)濕度傳感器來(lái)計(jì)算(suàn)和(hé)報(bào)告露點,旅行應用(yòng)則可以使用(yòng)地磁場傳感器和(hé)加速度計(jì)來(lái)報(bào)告羅盤方位。

請(qǐng)參閱以下(xià)相關資源:

傳感器

動态傳感器

位置傳感器

環境傳感器

Accelerometer Play

API 演示 (OS - RotationVectorDemo)

Android 平台支持三大(dà)類傳感器:

動态傳感器

這(zhè)類傳感器測量三個軸向上(shàng)的加速力和(hé)旋轉力。這(zhè)個類别中包含加速度計(jì)、重力傳感器、陀螺儀和(hé)旋轉矢量傳感器。

環境傳感器

這(zhè)類傳感器測量各種環境參數,如環境氣溫、氣壓、照度和(hé)濕度。這(zhè)個類别中包含氣壓計(jì)、光度計(jì)和(hé)溫度計(jì)。

位置傳感器

這(zhè)類傳感器測量設備的物理(lǐ)位置。這(zhè)個類别中包含屏幕方向傳感器和(hé)磁力計(jì)。

您可以利用(yòng) Android 傳感器框架訪問設備上(shàng)提供的傳感器并獲取原始傳感器數據。傳感器框架提供多個類和(hé)接口,可幫助您執行各種與傳感器相關的任務。例如,您可以使用(yòng)傳感器框架執行以下(xià)操作(zuò):

确定設備上(shàng)有哪些(xiē)傳感器。

确定單個傳感器的特性,例如最大(dà)量程、制造商、功率要求和(hé)分辨率。

獲取原始傳感器數據并定義獲取傳感器數據的最低(dī)頻率。

注冊和(hé)取消注冊用(yòng)于監控傳感器變化的傳感器事(shì)件監聽器。

本主題簡要介紹 Android 平台所支持的傳感器以及傳感器框架。

傳感器簡介

利用(yòng) Android 傳感器框架,您可以訪問多種類型的傳感器。有些(xiē)傳感器基于硬件,有些(xiē)基于軟件。基于硬件的傳感器是内置在手機或平闆設備中的物理(lǐ)組件。這(zhè)類傳感器通過直接測量特定的環境屬性(如加速度、地磁場強度或角度變化)來(lái)采集數據。基于軟件的傳感器不是物理(lǐ)設備,它們隻是模仿基于硬件的傳感器。基于軟件的傳感器從(cóng)一個或多個基于硬件的傳感器獲取數據,有時(shí)被稱爲虛拟傳感器或合成傳感器。比如線性加速度傳感器和(hé)重力傳感器就是基于軟件的傳感器。表 1 總結了(le) Android 平台支持的傳感器。

很(hěn)少有 Android 設備擁有所有類型的傳感器。例如,大(dà)多數手機設備和(hé)平闆電腦(nǎo)都有加速度計(jì)和(hé)磁力計(jì),但(dàn)很(hěn)少有氣壓計(jì)或溫度計(jì)。此外(wài),一個設備可以有多個特定類型的傳感器。例如,一個設備可以有兩個重力傳感器,分别具有不同的量程。

表 1. Android 平台支持的傳感器類型。

傳感器 類型 說明(míng) 常見用(yòng)途
TYPE_ACCELEROMETER 硬件 測量在所有三個物理(lǐ)軸向(x、y 和(hé) z)上(shàng)施加在設備上(shàng)的加速力(包括重力),以 m/s2 爲單位。 動态檢測(搖晃、傾斜等)。
TYPE_AMBIENT_TEMPERATURE 硬件 以攝氏度 (°C) 爲單位測量環境室溫。請(qǐng)參見下(xià)面的備注。 監測氣溫。
TYPE_GRAVITY 軟件或硬件 測量在所有三個物理(lǐ)軸向(x、y、z)上(shàng)施加在設備上(shàng)的重力,單位爲 m/s2 動态檢測(搖晃、傾斜等)。
TYPE_GYROSCOPE 硬件 測量設備在三個物理(lǐ)軸向(x、y 和(hé) z)上(shàng)的旋轉速率,以 rad/s 爲單位。 旋轉檢測(旋轉、轉動等)。
TYPE_LIGHT 硬件 測量環境光級(照度),以 lx 爲單位。 控制屏幕亮(liàng)度。
TYPE_LINEAR_ACCELERATION 軟件或硬件 測量在所有三個物理(lǐ)軸向(x、y 和(hé) z)上(shàng)施加在設備上(shàng)的加速力(不包括重力),以 m/s2 爲單位。 監測單個軸向上(shàng)的加速度。
TYPE_MAGNETIC_FIELD 硬件 測量所有三個物理(lǐ)軸向(x、y、z)上(shàng)的環境地磁場,以 μT 爲單位。 創建羅盤。
TYPE_ORIENTATION 軟件 測量設備圍繞所有三個物理(lǐ)軸(x、y、z)旋轉的度數。從(cóng) API 級别 3 開(kāi)始,您可以結合使用(yòng)重力傳感器、地磁場傳感器和(hé) getRotationMatrix() 方法來(lái)獲取設備的傾角矩陣和(hé)旋轉矩陣。 确定設備位置。
TYPE_PRESSURE 硬件 測量環境氣壓,以 hPa 或 mbar 爲單位。 監測氣壓變化。
TYPE_PROXIMITY 硬件 測量物體相對(duì)于設備顯示屏幕的距離,以 cm 爲單位。該傳感器通常用(yòng)于确定手機是否被舉到(dào)人的耳邊。 通話(huà)過程中手機的位置。
TYPE_RELATIVE_HUMIDITY 硬件 測量環境的相對(duì)濕度,以百分比 (%) 表示。 監測露點、絕對(duì)濕度和(hé)相對(duì)濕度。
TYPE_ROTATION_VECTOR 軟件或硬件 通過提供設備旋轉矢量的三個元素來(lái)檢測設備的屏幕方向。 動态檢測和(hé)旋轉檢測。
TYPE_TEMPERATURE 硬件 測量設備的溫度,以攝氏度 (°C) 爲單位。該傳感器的實現(xiàn)因設備而異。在 API 級别 14 中,該傳感器已被 TYPE_AMBIENT_TEMPERATURE 傳感器取代 監測溫度。

傳感器框架

您可以利用(yòng) Android 傳感器框架來(lái)訪問這(zhè)些(xiē)傳感器并獲取傳感器的原始數據。傳感器框架是 android.hardware 軟件包的一部分,包含了(le)以下(xià)類和(hé)接口:

SensorManager

您可以使用(yòng)這(zhè)個類來(lái)創建傳感器服務的實例。該類提供了(le)各種方法來(lái)訪問和(hé)列出傳感器,注冊和(hé)取消注冊傳感器事(shì)件監聽器,以及獲取屏幕方向信息。它還提供了(le)幾個傳感器常量,用(yòng)于報(bào)告傳感器精确度,設置數據采集頻率和(hé)校準傳感器。

Sensor

您可以使用(yòng)這(zhè)個類來(lái)創建特定傳感器的實例。該類提供了(le)各種方法來(lái)确定傳感器的特性。

SensorEvent

系統使用(yòng)這(zhè)個類來(lái)創建傳感器事(shì)件對(duì)象,該對(duì)象提供有關傳感器事(shì)件的信息。傳感器事(shì)件對(duì)象中包含以下(xià)信息:原始傳感器數據、生成事(shì)件的傳感器類型、數據的準确度和(hé)事(shì)件的時(shí)間戳。

SensorEventListener

您可以使用(yòng)此接口創建兩種回調方法,以在傳感器值或傳感器精确度發生變化時(shí)接收通知(zhī)(傳感器事(shì)件)。

在典型的應用(yòng)中,您可以使用(yòng)這(zhè)些(xiē)與傳感器相關的 API 來(lái)執行兩個基本任務:

識别傳感器和(hé)傳感器特性

如果應用(yòng)具有依賴于特定傳感器類型或特性的功能(néng),則在運行時(shí)識别傳感器和(hé)傳感器特性非常有用(yòng)。例如,您可能(néng)希望識别設備上(shàng)的所有傳感器,以便于停用(yòng)依賴于不存在的傳感器的應用(yòng)功能(néng)。同樣,您可能(néng)希望識别特定類型的所有傳感器,以便選擇可以爲應用(yòng)帶來(lái)最佳性能(néng)的傳感器實現(xiàn)。

監控傳感器事(shì)件

您可以通過監控傳感器事(shì)件來(lái)獲取原始傳感器數據。每當傳感器檢測到(dào)它所測量的參數發生變化時(shí),就會(huì)發生傳感器事(shì)件。傳感器事(shì)件爲您提供 4 項信息:觸發事(shì)件的傳感器的名稱、事(shì)件的時(shí)間戳、事(shì)件的準确度以及觸發事(shì)件的原始傳感器數據。

傳感器可用(yòng)性

傳感器的可用(yòng)性不僅取決于設備,還取決于 Android 版本。這(zhè)是因爲 Android 傳感器的引入曆經了(le)多個平台版本。例如,許多傳感器是在 Android 1.5(API 級别 3)中引入的,但(dàn)有些(xiē)傳感器直到(dào) Android 2.3(API 級别 9)才實現(xiàn)并可供使用(yòng)。同樣,在 Android 2.3(API 級别 9)和(hé) Android 4.0(API 級别 14)中也(yě)引入了(le)幾個傳感器。有兩個傳感器已被棄用(yòng),并由更新、更好(hǎo)的傳感器取代。

表 2 總結了(le)每個傳感器在不同平台上(shàng)的可用(yòng)性。這(zhè)裏僅列出了(le) 4 個平台,因爲隻有這(zhè)些(xiē)平台涉及到(dào)傳感器更改。被列爲棄用(yòng)的傳感器仍可在後續平台上(shàng)使用(yòng)(前提是設備上(shàng)有相關傳感器),這(zhè)符合 Android 的向前兼容性政策。

表 2. 傳感器在不同平台上(shàng)的可用(yòng)性。

傳感器 Android 4.0
(API 級别 14)
Android 2.3
(API 級别 9)
Android 2.2
(API 級别 8)
Android 1.5
(API 級别 3)
TYPE_ACCELEROMETER 可用(yòng) 可用(yòng) 可用(yòng) 可用(yòng)
TYPE_AMBIENT_TEMPERATURE 可用(yòng) 不可用(yòng) 不可用(yòng) 不可用(yòng)
TYPE_GRAVITY 可用(yòng) 可用(yòng) 不可用(yòng) 不可用(yòng)
TYPE_GYROSCOPE 可用(yòng) 可用(yòng) 不可用(yòng)1 不可用(yòng)1
TYPE_LIGHT 可用(yòng) 可用(yòng) 可用(yòng) 可用(yòng)
TYPE_LINEAR_ACCELERATION 可用(yòng) 可用(yòng) 不可用(yòng) 不可用(yòng)
TYPE_MAGNETIC_FIELD 可用(yòng) 可用(yòng) 可用(yòng) 可用(yòng)
TYPE_ORIENTATION 可用(yòng)2 可用(yòng)2 可用(yòng)2 可用(yòng)
TYPE_PRESSURE 可用(yòng) 可用(yòng) 不可用(yòng)1 不可用(yòng)1
TYPE_PROXIMITY 可用(yòng) 可用(yòng) 可用(yòng) 可用(yòng)
TYPE_RELATIVE_HUMIDITY 可用(yòng) 不可用(yòng) 不可用(yòng) 不可用(yòng)
TYPE_ROTATION_VECTOR 可用(yòng) 可用(yòng) 不可用(yòng) 不可用(yòng)
TYPE_TEMPERATURE 可用(yòng)2 可用(yòng) 可用(yòng) 可用(yòng)

網站(zhàn)建設開(kāi)發|APP設計(jì)開(kāi)發|小(xiǎo)程序建設開(kāi)發
下(xià)一篇:Android運動傳感器
上(shàng)一篇:創建使用(yòng)舊 API 的實現(xiàn)