傳感器類型
方向、加速表、光線、磁場、臨近性、溫度等。
採樣率
最快、遊戲、普通、用戶界面。當應用程序請求特定的採樣率時,其實只是對傳感器子系統的一個提示,或者一個建議。不保證特定的採樣率可用。
準確性
高、低、中、不可靠。
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 |
} |
|
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 溫度感應器,可以獲取手機的內部溫度,不過和周邊的有些差距,畢竟手機內部一般溫度比較高。