安卓手機感應器的使用

來源:互聯網
上載者:User

標籤: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 :磁力感應器

以上感應器是自己寫的一個程式測出來的。

操作手機中的感應器無非這幾個步驟:

  1. 擷取感應器管理者
  2. 擷取感應器對象
  3. 註冊感應器監聽
  4. 在感應器監聽中擷取資料(資料改變事件)

 

首先第一步:擷取感應器管理者

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有感應器擷取方法、演算法的詳細描述,希望各位親認真閱讀。

 

安卓手機感應器的使用

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.