標籤:auth get 一個 gis 擷取資料 service type list oat
現在的安卓手機中都有各種各樣的感應器,比如加速度感應器、陀螺儀之類的,我現在用的vivo v3手機中總共九種感應器分別為:
lis3dh-accel :三軸加速度感應器
TMD277X-proximity :近距離感應器
TMD277X-light :光線感應器
yas533-orientation :方向感應器
yas533-pseudo-gyro :動作感應器
yas533-linear-acceleration : 線加速度感應器
yas533-rotation-vector :旋轉向量感應器
yas533-gravity :陀螺儀
yas533-mag :磁力感應器
以上感應器是自己寫的一個程式測出來的。
操作手機中的感應器無非這幾個步驟:
- 擷取感應器管理者
- 擷取感應器對象
- 註冊感應器監聽
- 在感應器監聽中擷取資料(資料改變事件)
首先第一步:擷取感應器管理者
SensorManager sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);//擷取感應器管理者
sensorManager中有幾個重要的方法:
- getSensorList(int type) 返回list集合,集合中是手機內所有的感應器對象(sensor)
- getDefaultSensor(int type) 返回type指定的感應器對象,如 Sensor accelSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 擷取的是加速度感應器對象
- registerListener(SensorListener listener, int sensors, int rate) 註冊感應器監聽事件
第二步:擷取感應器對象
Sensor accelSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);//擷取感應器對象
感應器對象主要用於確定要操作的是什麼感應器,上例中是(三軸)加速度感應器
- Sensor類中有許多 TYPE_xxxx 的int值常量,這些常量每一個表示不同的感應器,主要用於擷取感應器對象時確定感應器類型
- getName() 獲得感應器名字
- getPower() 獲得感應器功率,單位不詳
- getResolution() 獲得感應器解析度
- getType() 獲得感應器類型
- getVendor() 獲得感應器製造商
- getVersion()獲得感應器版本
第三步:註冊感應器監聽事件
使用SensorManager中的
/** * * @param listener 監聽事件介面 * @param sensors 感應器對象 * @param rate 採樣率,值必須是 SENSOR_DELAY_NORMAL, SENSOR_DELAY_UI, SENSOR_DELAY_GAME, or SENSOR_DELAY_FASTEST 的其中一個 */registerListener(SensorEventListener listener, int sensors, int rate)
- 建立一個類實現監聽器的SensorEventListener介面,並且實現其中兩個方法:感應器數值改變時回調的 onSensorChanged(SensorEvent event) 方法 、解析度改變回調的 onAccuracyChanged(int sensor, int accuracy)方法 (重點)
- onSensorChanged(SensorEvent event) 方法中使用 event.values 擷取float數組,數組的值即為測量值,具體操作方法詳見API
- 第二個參數傳入感應器對象
- 第三個參數時採樣率,
SENSOR_DELAY_NORMAL 200000μs取樣一次
SENSOR_DELAY_UI 60000μs取樣一次
SENSOR_DELAY_GAME 2000μs取樣一次
SENSOR_DELAY_FASTEST 0μs取樣一次(以cpu最快取樣速率進行)
例如:
sensorManager.registerListener(new accelListener(), accelSensor, SensorManager.SENSOR_DELAY_NORMAL);//註冊感應器監聽事件
/** * 內部類,實現SensorEventListener 介面 * @author Administrator * */ class accelListener implements SensorEventListener{ /* * 感應器數值改變時回調 * @see android.hardware.SensorEventListener#onSensorChanged(android.hardware.SensorEvent) */ @Override public void onSensorChanged(SensorEvent event) { // TODO Auto-generated method stub float i= event.values[0]; System.out.print(i); } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { // TODO Auto-generated method stub } }
Android Develop API android.hardware有感應器擷取方法、演算法的詳細描述,希望各位親認真閱讀。
安卓手機感應器的使用