安卓 感應器基礎

來源:互聯網
上載者:User

標籤:shu   bre   his   photo   擷取   ext   systems   關係   注意   

基礎部分感應器類型

動作感應器

這類感應器在三個軸(X、Y、Z)上測量加速度和旋轉角度。包括如下幾個感應器。

加速(accelerometer)感應器

陀螺儀(gyroscope)感應器

重力(gravity)感應器

線性加速(linear acceleration)感應器

旋轉向量(rotational vector)感應器

環境感應器

這類感應器可以測量不同環境的參數,例如周圍環境的空氣溫度和壓強、光照強度和濕度。包括如下幾個感應器。

溫度(barometer)感應器

光線(photometer)感應器

溫度(thermometer)感應器

壓力(pressure)感應器

定位感應器

這類感應器可以測量裝置的物理位置。包括如下幾個感應器。

方向(orientation)感應器(資料來自加速感應器和磁場感應器)

磁場(magnetomenter)感應器

 

安卓感應器類型

TYPE_ACCELEROMETER         //加速度感應器(硬體)

TYPE_MAGNETIC_FIELD        //磁場感應器(硬體)

TYPE_ORIENTATION           //方向感應器(軟體感應器,資料來自重力和磁場感應器)

TYPE_GYROSCOPE             //陀螺儀感應器(硬體)

TYPE_LIGHT                 //光線感應器(硬體)

TYPE_PRESSURE              //壓力感應器(硬體)

TYPE_PROXIMITY             //臨近感應器(硬體)

TYPE_GRAVITY               //重場感應器(硬體或軟體)

TYPE_LINEAR_ACCELERATION   //線性加速度感應器(硬體或軟體)

TYPE_ROTATION_VECTOR       //旋轉向量感應器(硬體或軟體)

TYPE_RELATIVE_HUMIDITY     //濕度感應器(硬體)

TYPE_AMBIENT_TEMPERATURE   //溫度感應器(硬體)

TYPE_TEMPERATURE           //溫度感應器(硬體),從Android4.0開始被TYPE_AMBIENT_TEMPERATURE取代

 

 

安卓感應器參數

感應器回調頻率

參數

延遲時間

SensorManager.SENSOR_DELAY_FASTEST

0ms

SensorManager.SENSOR_DELAY_GAME

20ms

SensorManager.SENSOR_DELAY_UI

60ms

SensorManager.SENSOR_DELAY_NORMAL

200ms

 

感應器傳回值@link

加速度感應檢測——Accelerometer

Accelerometer Sensor測量的是所有施加在裝置上的力所產生的加速度的負值(包括重力加速度)。加速度所使用的單位是m/sec^2,數值是加速度的負值。

SensorEvent.values[0]:加速度在X軸的負值

SensorEvent.values[1]:加速度在Y軸的負值

SensorEvent.values[2]:加速度在Z軸的負值

例如:

當手機Z軸朝上平放在案頭上,並且從左至右推動手機,此時X軸上的加速度是正數。

當手機Z軸朝上靜止放在案頭上,此時Z軸的加速度是+9.81m/sec^2。

當手機從空中自由落體,此時加速度是0

當手機向上以Am/sec^2的加速度向空中拋出,此時加速度是A+9.81m/sec^2

 

重力加速度感應檢測——Gravity

重力加速度,其單位是m/sec^2,其座標系與Accelerometer使用的一致。當手機靜止時,gravity的值和Accelerometer的值是一致的。

 

線性加速度感應檢測——Linear-Acceleration

Accelerometer、Gravity和Linear-Acceleration三者的關係如下公式:

 

accelerometer = gravity + linear-acceleration

 

地磁場感應檢測——Magnetic-field

地磁場的單位是micro-Tesla(uT),檢測的是X、Y、Z軸上的絕對地磁場。

 

陀螺儀感應檢測——Gyroscope

陀螺儀的單位是弧度/秒,測量的是物體分別圍繞X,Y,Z軸旋轉的角速度。它的座標系與加速度感應器的座標系相同。逆時針方向旋轉的角度正的。也就是說,如果裝置逆時針旋轉,觀察者向X,Y,Z軸的正方向看去,就報告裝置是正轉的。請注意,這是標準的正旋轉的數學定義。

 

光線感應檢測——Light

values[0]:表示環境光線照的水平,單位是SI lux。

 

位置逼近感應檢測——Proximity

values[0]:逼近的距離,單位是厘米(cm)。有一些感應器只能支援近和遠兩種狀態,這種情況下,感應器必須報告它在遠狀態下的maximum_range值和在近狀態下的小值。

 

旋轉向量感應檢測——Rotation Vector

旋轉向量是用來表示裝置的方向,它是由角度和軸組成,就是裝置圍繞x,y,z軸之一旋轉θ角度。旋轉向量的三個要素是,這樣旋轉向量的大小等於sin(θ/2),旋轉向量的方向等於旋轉軸的方向。

values[0]: x*sin(θ/2)

values[1]: y*sin(θ/2)

values[2]: z*sin(θ/2)

values[3]: cos(θ/2) (optional: only if value.length = 4)

 

方向感應檢測——Orientation

其單位是角度

values[0]: Azimuth(方位),地磁北方向與y軸的角度,圍繞z軸旋轉(0到359)。0=North, 90=East, 180=South, 270=West

values[1]: Pitch(俯仰),圍繞X軸旋轉(-180 to 180), 當Z軸向Y軸運動時是正值

values[2]: Roll(滾),圍繞Y軸旋轉(-90 to 90),當X軸向Z軸運動時是正值

 

API:

擷取系統支援感應器類型    /**     * 支援感應器列表     *  http://blog.csdn.net/redoq/article/details/52515123     *  https://zhidao.baidu.com/question/2205380242168742428.html     *  http://www.jianshu.com/p/4c141d851346     */    private void testSupportSensorList(){        SensorManager sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);        String sensorStr = "";        List<Sensor> list = sensorManager.getSensorList(Sensor.TYPE_ALL);        for (Sensor sensor:list){            sensorStr += sensor.getName() + "\n";        }        XLog.i(sensorStr);        sensorStr = "";        for (Sensor sensor:list){            switch (sensor.getType()){                case Sensor.TYPE_ACCELEROMETER:                    sensorStr += "加速度感應器" + "\n";                    break;                case Sensor.TYPE_MAGNETIC_FIELD:                    sensorStr += "磁場感應器" + "\n";                    break;                case Sensor.TYPE_ORIENTATION:                    sensorStr += "方向感應器" + "\n";                    break;                case Sensor.TYPE_GYROSCOPE:                    sensorStr += "陀螺儀感應器" + "\n";                    break;                case Sensor.TYPE_LIGHT:                    sensorStr += "光線感應器" + "\n";                    break;                case Sensor.TYPE_PRESSURE:                    sensorStr += "壓力感應器" + "\n";                    break;                case Sensor.TYPE_PROXIMITY:                    sensorStr += "臨近感應器" + "\n";                    break;                case Sensor.TYPE_GRAVITY:                    sensorStr += "重場感應器" + "\n";                    break;                case Sensor.TYPE_LINEAR_ACCELERATION:                    sensorStr += "線性加速度感應器" + "\n";                    break;                case Sensor.TYPE_ROTATION_VECTOR:                    sensorStr += "旋轉向量感應器" + "\n";                case Sensor.TYPE_RELATIVE_HUMIDITY:                    sensorStr += "濕度感應器" + "\n";                    break;                case Sensor.TYPE_AMBIENT_TEMPERATURE:                    sensorStr += "溫度感應器" + "\n";                    break;                case Sensor.TYPE_TEMPERATURE:                    sensorStr += "溫度感應器" + "\n";                    break;            }        }        XLog.i(sensorStr);}感應器使用步驟(通用)s1、使用感應器之前首先擷取SensorManager通過系統服務擷取:SensorManager  mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);s2、擷取我們需要的感應器類型://單次有效計步Sensor  mStepCount = mSensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);//系統計步累加值Sensor  mStepDetector = mSensorManager.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR);s3、註冊監聽者(監聽感應器事件)mSensorManager.registerListener(this, mStepDetector, SensorManager.SENSOR_DELAY_FASTEST);mSensorManager.registerListener(this, mStepCount, SensorManager.SENSOR_DELAY_FASTEST);PS:取消註冊:mSensorManager.unregisterListener(this, mStepDetector);mSensorManager.unregisterListener(this, mStepCount);s4、實現SensorEventListener介面,重寫方法並擷取資料@Overridepublic void onSensorChanged(SensorEvent event) 

參考:

     http://blog.csdn.net/mad1989/article/details/20848181

     如何擷取Android裝置所支援的感應器種類

     android 判斷支援哪些感應器

     Android-關於感應器你需要知道的

安卓 感應器基礎

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.