码迷,mamicode.com
首页 > 移动开发 > 详细

安卓 传感器基础

时间:2017-10-29 15:55:39      阅读:199      评论:0      收藏:0      [点我收藏+]

标签: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接口,重写方法并获取数据
@Override
public void onSensorChanged(SensorEvent event) 

参考:

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

     如何获取Android设备所支持的传感器种类

     android 判断支持哪些传感器

     Android-关于传感器你需要知道的

安卓 传感器基础

标签:shu   bre   his   photo   获取   ext   systems   关系   注意   

原文地址:http://www.cnblogs.com/zhen-android/p/7750146.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!