Android传感器简单总结
Posted Alex_MaHao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android传感器简单总结相关的知识,希望对你有一定的参考价值。
后续不断完善
概述
android 平台支持三大类传感器:
- 动态传感器
这类传感器测量三个轴向上的加速力和旋转力。这个类别中包含加速度计、重力传感器、陀螺仪和旋转矢量传感器。
- 环境传感器
这类传感器测量各种环境参数,如环境气温、气压、照度和湿度。这个类别中包含气压计、光度计和温度计。
- 位置传感器
这类传感器测量设备的物理位置。这个类别中包含屏幕方向传感器和磁力计。
具体类型
传感器 | 说明 | 常见用途 |
---|---|---|
TYPE_ACCELEROMETER | 测量在所有三个物理轴向(x、y 和 z)上施加在设备上的加速力(包括重力),以 m/s2 为单位。 | 动态检测(摇晃、倾斜等)。 |
TYPE_GRAVITY | 测量在所有三个物理轴向(x、y、z)上施加在设备上的重力,单位为 m/s2。 | 动态检测(摇晃、倾斜等)。 |
TYPE_GYROSCOPE | 测量设备在三个物理轴向(x、y 和 z)上的旋转速率,以 rad/s 为单位。 | 旋转检测(旋转、转动等)。 |
TYPE_LINEAR_ACCELERATION | 测量在所有三个物理轴向(x、y 和 z)上施加在设备上的加速力(不包括重力),以 m/s2 为单位。 | 监测单个轴向上的加速度。 |
TYPE_ORIENTATION | 测量设备围绕所有三个物理轴(x、y、z)旋转的度数。从 API 级别 3 开始,您可以结合使用重力传感器、地磁场传感器和 getRotationMatrix() 方法来获取设备的倾角矩阵和旋转矩阵。 | 确定设备位置。 |
TYPE_PROXIMITY | 测量物体相对于设备显示屏幕的距离,以 cm 为单位。该传感器通常用于确定手机是否被举到人的耳边。 | 传感器通常用于确定手机是否被举到人的耳边。 通话过程中手机的位置。 |
TYPE_ROTATION_VECTOR | 通过提供设备旋转矢量的三个元素来检测设备的屏幕方向。 | 动态检测和旋转检测。 |
TYPE_AMBIENT_TEMPERATURE | 以摄氏度 (°C) 为单位测量环境室温。 | 监测气温。 |
TYPE_LIGHT | 测量环境光级(照度),以 lx 为单位。 | 控制屏幕亮度。 |
TYPE_PRESSURE | 测量环境气压,以 hPa 或 mbar 为单位。 | 监测气压变化。 |
TYPE_RELATIVE_HUMIDITY | 测量环境的相对湿度,以百分比 (%) 表示。 | 监测露点、绝对湿度和相对湿度。 |
以上的传感器有的是由硬件支持,有的是由软件通过多个传感器结合之后计算支持
基本使用
1.获取SensorManager对象
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
2.获取具体的传感器类型
//这里我们除了可以获取加速度传感器之外,还可以获取其他类型的传感器,如:
//* Sensor.TYPE_ORIENTATION:方向传感器。
//* Sensor.TYPE_GYROSCOPE:陀螺仪传感器。
//* Sensor.TYPE_MAGNETIC_FIELD:磁场传感器。
//* Sensor.TYPE_GRAVITY:重力传感器。
//* Sensor.TYPE_LINEAR_ACCELERATION:线性加速度传感器。
//* Sensor.TYPE_AMBIENT_TEMPERATURE:温度传感器。
//* Sensor.TYPE_LIGHT:光传感器。
//* Sensor.TYPE_PRESSURE:压力传感器。
// 获取传感器的类型
mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
3.注册监听和解注册
onResume()
中注册监听
mSensorManager.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_GAME);
注册时第三个参数指示回调的频率,基于性能考虑,可选参数如下:
/** get sensor data as fast as possible 延迟0微秒 */
public static final int SENSOR_DELAY_FASTEST = 0;
/** rate suitable for games 延迟 20 000 微秒 */
public static final int SENSOR_DELAY_GAME = 1;
/** rate suitable for the user interface 延迟 60 000 微秒 */
public static final int SENSOR_DELAY_UI = 2;
/** rate (default) suitable for screen orientation changes 延迟 200,000 微秒*/
public static final int SENSOR_DELAY_NORMAL = 3;
onStop()
中解注册
mSensorManager.unregisterListener(this);
4.监听回调方法
上一步中注册的监听方法,对应的回调的方法如下
@Override
public void onSensorChanged(SensorEvent event)
// 回调当前的相关传感器结果
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy)
// 精度发生改变
常用方法
获取当前设备传感器列表
List<Sensor> deviceSensors = sensorManager.getSensorList(Sensor.TYPE_ALL);
Sensor对象常见属性
以下是通过toString()
打印的对象属性
Sensor name="ICM20690 Accelerometer", vendor="InvenSense", version=1, type=1, maxRange=78.4532, resolution=0.0023956299, power=0.325, minDelay=5000
vendor
和version
表示制造商和版本,可以根据该字段来判断是否使用该传感器,进行区分操作
minDelay
:传感器可用于检测数据的最小时间间隔(以微秒为单位,1s = 100万μs),如果返回0表示数据变化是才会报告数据,非0表示定时检测并更新数据
power
:传感器的电量要求
resolution
:传感器的分辨率
MaxRange
:最大量程
传感器坐标系
x轴:屏幕向右
y轴:屏幕向上
z轴:垂直屏幕向外
方向传感器的三个值
而方向传感器则刚好有三个元素,都表示度数! 对应的含义如下:
- values[0]:方位角,手机绕着Z轴旋转的角度。0表示正北(North),90表示正东(East), 180表示正南(South),270表示正西(West)。
- values[1]:倾斜角,手机翘起来的程度,当手机绕着x轴倾斜时该值会发生变化。取值 范围是[-180,180]之间。假如把手机放在桌面上,而桌面是完全水平的话,values1的则应该 是0,当然很少桌子是绝对水平的。从手机顶部开始抬起,直到手机沿着x轴旋转180(此时屏幕 乡下水平放在桌面上)。在这个旋转过程中,values[1]的值会从0到-180之间变化,即手机抬起 时,values1的值会逐渐变小,知道等于-180;而加入从手机底部开始抬起,直到手机沿着x轴 旋转180度,此时values[1]的值会从0到180之间变化。我们可以利用value[1]的这个特性结合 value[2]来实现一个平地尺!
- value[2]:滚动角,沿着Y轴的滚动角度,取值范围为:[-90,90],假设将手机屏幕朝上水平放在 桌面上,这时如果桌面是平的,values2的值应为0。将手机从左侧逐渐抬起,values[2]的值将 逐渐减小,知道垂直于手机放置,此时values[2]的值为-90,从右侧则是0-90;加入在垂直位置 时继续向右或者向左滚动,values[2]的值将会继续在-90到90之间变化!
以上是关于Android传感器简单总结的主要内容,如果未能解决你的问题,请参考以下文章