Android之sensor 傳感器

傳感器類型

方向、加速表、光線、磁場、臨近性、溫度等。

採樣率

最快、遊戲、普通、用戶界面。當應用程序請求特定的採樣率時,其實只是對傳感器子系統的一個提示,或者一個建議。不保證特定的採樣率可用。

準確性

高、低、中、不可靠。

SensorListener 接口是傳感器應用程序的中心。它包括兩個必需方法:

·       onSensorChanged(intsensor,float values[]) 方法在傳感器值更改時調用。該方法只對受此應用程序監視的傳感器調用(更多內容見下文)。該方法的參數包括:一個整數,指示更改的傳感器;一個浮點值數組,表示傳感器數據本身。有些傳感器只提供一個數據值,另一些則提供三個浮點值。方向和加速表傳感器都提供三個數據值。

·       當傳感器的準確性更改時,將調用 onAccuracyChanged(intsensor,int accuracy) 方法。參數包括兩個整數:一個表示傳感器,另一個表示該傳感器新的準確值。

要與傳感器交互,應用程序必須註冊以偵聽與一個或多個傳感器相關的活動。註冊使用 SensorManager 類的 registerListener 方法完成。本文中的 代碼示例 演示瞭如何註冊和註銷 SensorListener

記住,並非所有支持 Android 的設備都支持 SDK 中定義的所有傳感器。如果某個傳感器無法在特定的設備上使用,您的應用程序就會適當地降級。

·      Android所有的傳感器都歸傳感器管理器 SensorManager 管理,獲取傳感器管理器的方法很簡單:
String service_name = Context.SENSOR_SERVICE;

SensorManager sensorManager =(SensorManager)getSystemService(service_name);

·      現階段Android支持的傳感器有8種,它們分別是:

傳感器類型常量

內部整數值

中文名稱

Sensor.TYPE_ACCELEROMETER

1、加速,描述加速度的

加速度傳感器

Sensor.TYPE_MAGNETIC_FIELD

2、 磁極感應器

磁力傳感器

Sensor.TYPE_ORIENTATION

3、 方向感應器

方向傳感器

Sensor.TYPE_GYROSCOPE

4、 陀螺儀感應器

陀螺儀傳感器

Sensor.TYPE_LIGHT

5、 光線感應器

環境光照傳感器

Sensor.TYPE_PRESSURE

6、 壓力感應器

壓力傳感器

Sensor.TYPE_TEMPERATURE

7、 溫度感應器

溫度傳感器

Sensor.TYPE_PROXIMITY

8、 距離感應器

距離傳感器

                     

·      從傳感器管理器中獲取其中某個或者某些傳感器的方法有如下三種:
第一種:獲取某種傳感器的默認傳感器
Sensor defaultGyroscope =sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
第二種:獲取某種傳感器的列表
List<Sensor> pressureSensors =sensorManager.getSensorList(Sensor.TYPE_PRESSURE);
第三種:獲取所有傳感器的列表,我們這個例子就用的第三種
List<Sensor> allSensors = sensorManager.getSensorList(Sensor.TYPE_ALL);

·      對於某一個傳感器,它的一些具體信息的獲取方法可以見下表:

方法

描述

getMaximumRange()

最大取值範圍

getName()

設備名稱

getPower()

功率

getResolution()

精度

getType()

傳感器類型

getVentor()

設備供應商

getVersion()

設備版本號

 

//1、取得重力感應器Sensor對象

02

// Activity 中定義以下成員變量:

03

private SensorManager mManager = null;

 

04

private Sensor mSensor = null;

05

06

//以下代碼加入到 onCreate() 方法中:

07

mManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

08

09

mSensor = manager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

10

11

//2、創建監聽器

12

// Activity 中定義以下成員變量:

 

13

private SensorEventListener mListener = null;

14

15

//以下代碼加入到 onCreate() 方法中:

16

mListener = new SensorEventListener() {

 

17

public void onAccuracyChanged(Sensor sensor, int accuracy) {

18

}

19

20

public void onSensorChanged(SensorEvent event) {

21

float x = event.values[SensorManager.DATA_X];

 

22

float y = event.values[SensorManager.DATA_Y];

23

float z = event.values[SensorManager.DATA_Z];

 

24

doSomething(x, y, z);

25

}

 

26

 

27

28

//3、註冊監聽器

29

//以下代碼加入到 onResume() 方法中:

 

30

mManager.registerListener(mListener, mSensor, SensorManager.SENSOR_DELAY_GAME);

31

32

//這裏 SENSOR_DELAY_GAME 還可以是以下常量:

33

//SENSOR_DELAY_FASTEST

 

34

//SENSOR_DELAY_UI

35

//SENSOR_DELAY_NORMAL

36

37

//4、取消監聽器

38

//以下代碼加入到 onPause() 方法中:

 

39

mManager.unregisterListener(mListener);

 

 

在Android 2.3中新增了3個感應器,對於Android平臺的開發我們通過感應器可以發揮想象設計出一些很實用的軟件。下面就一起看下目前API11個感應器分別是什麼吧。

  1. ACCELEROMETER 加速,描述加速度的。
  2.GRAVITY 重力,Android2.3新增的
  3.GYROSCOPE 陀螺儀,對於物體跌落檢測更強大些,開發遊戲少了它會有點遺憾的,API Level 9新增的類型。
  4. LIGHT 光線感應器,很多Android手機的屏幕亮度是根據這個感應器的數組自動調節的。
  5. LINEAR_ACCELERATION 線性加速器,API Level 9新增的。
  6. MAGNETIC_FIELD 磁極感應器。
  7. ORIENTATION 方向感應器。
  8. PRESSURE 壓力感應器。 
  9. PROXIMITY 距離感應器,對於通話後關閉屏幕背光很有用。
  10. ROTATION_VECTOR 旋轉向量,Android 2.3新增的,如果我們過去處理圖像會發現這個還是很有用的,不過這裏還是對遊戲開發起到輔助。
  11. TEMPERATURE 溫度感應器,可以獲取手機的內部溫度,不過和周邊的有些差距,畢竟手機內部一般溫度比較高。

 

發佈了14 篇原創文章 · 獲贊 4 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章