Android 传感器总结

最近项目需要各种手机传感器,于是就此来写个总结,以此留痕。
在Android开发中,会用到各种传感器,但不一定每个真机都支持这些传感器。所以相关开发还要根据真机的实际情况来做开发。
1 获取手机的传感器
通过实例化SensorManager可以获取到手机的传感器集合

//实例化
mSensorManger= (SensorManager) getSystemService(Context.SENSOR_SERVICE);
List sensorList = mSensorManger.getSensorList(Sensor.TYPE_ALL);

获取到的传感器名称:
Accelerometer 加速计
Magnetometer 磁力计
Gyroscope 陀螺仪
Proximity Sensor 近距离传感器
Ambient Light Sensor 环境光传感器
Barometer Sensor 气压计
Temperature Sensor 温度传感器
Gravity 重力
Linear Acceleration 线性加速度
Rotation Vector 旋转矢量
Step Detector 步数探测器
Step Counter 计步器
Significant Motion Detector 运动检测器
Game Rotation Vector 游戏旋转矢量
Geomagnetic Rotation Vector 地磁旋转矢量
Orientation 方向
Basic Gestures 基本手势
Motion Accel 运动加速度

2 加速度传感器 TYPE_MAGNETIC_FIELD

加速度坐标系.png

获取加速度传感器最常用的方法就是 注册事件。通过实例化的SensorManger注册监听

mSensorManger.registerListener(this,mSensorManger.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD),SensorManager.SENSOR_DELAY_NORMAL);
//第三个参数是检测的精确度 
//SENSOR_DELAY_FASTEST  最快
 //SENSOR_DELAY_GAME    游戏开发中使用
 //SENSOR_DELAY_NORMAL  正常速度
  //SENSOR_DELAY_UI     最慢
  @Override
    public void onSensorChanged(SensorEvent sensorEvent) {
        if (sensorEvent.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
            float X_lateral = sensorEvent.values[0];
            float Y_longitudinal = sensorEvent.values[1];
            float Z_vertical = sensorEvent.values[2];
        }
    }
 @Override
    public void onAccuracyChanged(Sensor sensor, int i) {  
    }

理论情况上,当手机水平放置正面朝上时,x=0,y=0,z为重力加速度

手机正常放置.png

(下面用三维坐标点代替,重力加速度用g表示)
(g,0,0)表示手机左边朝下,(-g,0,0)表示手机右边朝下;
(0,g,0)表示手机底部在下,(0,-g,0)表示手机顶部在下;
(0,0,-g)表示手机屏幕在下,
//Todo 加速度传感器可用于计步(此处应有计步器代码)
3 压力传感器 TYPE_PRESSURE(可计算海拔高度)
 计算海拔高度一般有两种方式,一种是利用GPS或者第三方定位获取定位点,通过获得的定位点信息来获得海拔高度getAltitude(),一般这种方法适用于室外GPS信号好的时候,获得的精度更高信息更准确,但是在GPS信号弱或者是室内的时候,就需要用气压计来计算海拔。
大气压与海拔高度换算公式
p=p_0*(1-\frac {H} {44300})^{5.256}
式中:H——海拔高度,P0=大气压(0℃,101.325kPa)
换算成高度为
H=44300*\lbrace1-(\frac {p} {p_0})^{\frac {1} {5.256}}\rbrace

float sPa = sensorEvent.values[0];
 //计算海拔  sPa的单位 为hPa  而标准大气压的单位为kPa
double height = (1 - Math.pow((double) (sPa / 1013.25), (double) (1 / 5.265))) * 44300;

4 Step Detector 和Step Counter 计步器
5 方向传感器 TYPE_ORIENTATION

(未完待续……)

你可能感兴趣的:(Android 传感器总结)