首先介紹下,啥叫傳感器。
Sensor(傳感器): 維基百科告訴我:傳感器是接收信號或刺激並反應的器件,能將待測物理量或化學量轉換成另一對應輸出的裝置。
比如:重力傳感器,方向傳感器
Android對每個設備的傳感器都進行了抽象,SensorManger類用來控制傳感器,Sensor用來描述具體的傳感器,SensorEventListener用來監聽傳感器值的改變。
進入主題:
只需要五步,你就能搞定Sensor。讓你的程序變的更酷。
- //第一步:獲得SensorManager對象,返回的就是一個硬件設備的控制器
- SensorManager sensorManager = (SensorManager)getSystemService(SERVICE_NAME);
- //第二步:獲得特定的傳感器
- Sensor accelerSensor = sensorManager.getDefaultSensor(Sensor. TYPE_ACCELEROMETER);
- //第三步:創建SensorEventListener監聽傳感器的值改變並且做出相應的動作
- SensorEventListener mySensorListener = new SensorEventListener() {
- //傳感器的值改變調用此方法
- @Override
- public void onSensorChanged(SensorEvent event) {
- float x = event.values[0];
- float y = event.values[1];
- float z = event.values[2];
- //獲得值之後,你就可以進行相應的處理啦
- System.out.println("~~~X is :"+x);
- System.out.println("---Y is :"+y);
- System.out.println("+++Z is :"+z);
- }
- //傳感器的精確度改變調用此方法
- @Override
- public void onAccuracyChanged(Sensor sensor, int accuracy) {
- }
- }
- //第四步:註冊傳感器事件監聽事件
- sensorManager.registerListener(mySensorListener, accelerSensor, SensorManager.SENSOR_DELAY_NORMAL);
- //第五步:註銷傳感器事件的監聽
- sensorManager.unregisterListener(mySensorListener);
第二步中可以獲得如下傳感器,
傳感器類型列表:
Sensor.TYPE_ACCELEROMETER:
加速計傳感器
Sensor.TYPE_GYROSCOPE:
迴轉儀傳感器
Sensor.TYPE_LIGHT:
光傳感器,動態控制屏幕亮度
Sensor.TYPE_MAGNETIC_FIELD:
磁場傳感器
Sensor.TYPE_ORIENTATION:
方向傳感器
Sensor.TYPE_PRESSURE:
壓力傳感器
Sensor.TYPE_PROXIMIY:
鄰近距離傳感器
Sensor.TYPE_TEMPERATURE:
溫度傳感器
有些手機不支持部分感應裝置你可以判斷sensor是否爲null,爲null時你可以提示用戶。
你也可以使用下面的語句獲得設備可用的的傳感器列表:
List<Sensor> allSensors = sensorManger.getSensorList(Sensor.TYPE_ALL);
在第三步中,
三個參數分別爲:SensorEventListener、Sensor、傳感器的更新速率
前兩個參數都是之前聲明的。
第三個參數,有四個選擇。
傳感器更新速率:
SensorManager.SENSOR_DELAY_FASTEST:
指定可能最快的傳感器更新速率
SensorManager.SENSOR_DELAY_GAME:
指定適合在遊戲中使用的更新速率
SensorManager.SENSOR_DELAY_NORMAL:
指定默認的更新速率
SensorManager.SENSOR_DELAY_UI:
指定適合於更新UI的更新速率
第四步一般是在onResume()中進行。
第五步一般在onPause()中進行。
這樣Activity是和用戶交互時才使用它們。
我寫了一個方向傳感器的簡單例子,有興趣的同學可以下載:
http://download.csdn.net/source/3326822
就這樣你就可以進入Android的Sensor世界了,在接下來的文章中,我會結合遊戲和實例來詳細介紹部分傳感器。
時候也不早了,今天就到這裏了,謝謝大家。