Android系统传感器的使用
创作时间:
作者:
@小白创作中心
Android系统传感器的使用
引用
1
来源
1.
https://juejin.cn/post/7366020842147790899
本文将详细介绍Android系统中各种传感器的使用方法,包括传感器的种类、原理以及如何在Android应用中获取和使用传感器数据。通过本文,开发者可以更好地理解和应用传感器功能,为用户提供更丰富的交互体验。
概述
本文基于 gitee 项目administer/AndroidSensor。 实现了手机6轴数据的显示。
1.Android系统传感器
1.1 内置传感器种类
- 运动相关 测量三个轴上的加速力和旋转力。 包括:加速度计、重力传感器、陀螺仪和旋转矢量传感器
- 环境相关 测量环境参数,例如:气温、气压、光照和湿度 包括:温度计、气压计、光度计和湿度计
- 位置相关 测量设备的物理位置 包括:磁力计、距离传感器
1.2 基于硬件的传感器列表
- TYPE_ACCELEROMETER 加速度计 三个轴上的加速度(包含重力),单位m/s^2 数据:SensorEvent.values[3] xyz轴加速度 原理:测量惯性力。 模型:一个小球在一个方盒子中,每面墙都能感测压力。 检测到力的方向与它惯性力(加速度)的方向是相反的。
- TYPE_GYROSCOPE 陀螺仪 三个轴上的旋转角速度,单位rad/s 数据:SensorEvent.values[3] xyz轴旋转角速度 原理:角动量守恒。高速转动中地的转子具有惯性, 有抗拒方向改变的趋向,它的旋转轴永远指向一固定方向。 模型:旋转轴、转子、旋转轮、两个平衡环。 旋转轮静止,平衡环转动,旋转轮受力。
- TYPE_MAGNETIC_FIELD 磁力计 三个轴上的环境地磁场强度,单位μT 原理:测量外界磁场
1.3 基于软件的传感器列表(从一个或多个基于硬件的传感器派生其数据)
- TYPE_GRAVITY 重力 三个轴上的重力,单位m/s^2 数据:SensorEvent.values[3] xyz轴重力
- TYPE_LINEAR_ACCELERATION 线性加速度 三个轴上的加速度(不包括重力),单位m/s^2 数据:SensorEvent.values[3] xyz轴线性加速度
- TYPE_ROTATION_VECTOR 旋转矢量 用于运动检测,如检测手势、监测角变化、监测相对方位变化 依赖:加速度计、磁力计和陀螺仪 数据:SensorEvent.values[4] 沿 xyz 轴的旋转矢量分量+旋转矢量的标量分量
- TYPE_GAME_ROTATION_VECTOR 游戏旋转矢量传感器 不使用地磁场,Y轴不会指向北方,而是指向参照物
- TYPE_GEOMAGNETIC_ROTATION_VECTOR 地磁旋转矢量传感器 不使用陀螺仪,准确度低于正常旋转矢量传感器,但功耗低
2.描述物体运动姿态
2.1 坐标系
机身坐标系: 右手直角坐标系(右上外) X轴水平向右,Y轴垂直向上,Z轴垂直屏幕向外 大地坐标系:东北天坐标系 X轴指向东,Y轴指向北,Z轴指向天空 旋转的方向按右手法则定义 右手大拇指指向轴向,四指弯曲的方向为绕该轴旋转的方向
2.2 六自由度方向
X轴平行于船体基线指向船首,Y轴指向船体左侧,Z轴垂直于船体基线向上
- roll 飞行器横滚,船舶横摇 围绕X轴的角度,取值范围为[-180,180],单位°,当模组完全水平时为0
- pitch 飞行器俯仰,船舶纵摇 围绕Y轴的角度,取值范围为[-90,90],单位°,当模组完全水平时为0
- yaw 飞行器偏航,船舶首摇 围绕Z轴的角度,取值范围为[-180,180],单位°,当X轴指向正北时为0
- surge 飞行器纵移,船舶纵荡 X轴加速度
- sway 飞行器横移,船舶横荡 Y轴加速度
- heave 飞行器升降,船舶垂荡 Z轴加速度
3.Android系统传感器
3.1 获取传感器数据
//传感器服务
sensorManager = getSystemService(Context.SENSOR_SERVICE);
//获取某种传感器的列表。(可能有多个)
deviceSensors = sensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER);
//获取某种传感器的默认传感器。(是否存在!= null)
accelerometerSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
//获取传感器的参数(分辨率、量程)
getResolution() 和 getMaximumRange()
//监控传感器事件(默认频率200ms)
sensorManager.registerListener(sensorEventListener, accelerometerSensor, SensorManager.SENSOR_DELAY_NORMAL);
//当传感器的值发生变化时回调 event.values
onSensorChanged(SensorEvent event)
3.2 计算屏幕方向
float[] rotationMatrix = new float[9];//屏幕的旋转矩阵
float[] accelerometerData = new float[3];//加速度计数据
float[] magnetometerData = new float[3];//磁力计数据
float[] orientationAngles = new float[3];//屏幕的三个方向角
//基于加速度计和磁力计的当前读数的旋转矩阵
SensorManager.getRotationMatrix(rotationMatrix, null, accelerometerData, magnetometerData);
//将更新的旋转矩阵表示为三个方向角
SensorManager.getOrientation(rotationMatrix, orientationAngles);
4.官方文档
Android传感器
热门推荐
世界上真有龙存在吗?探索龙的神话与现实
打铁花用的生铁有什么要求?
1个运动坚持6个月,心脏明显变好了!不是走路,也不是跑步!
钢筋闪光对焊工艺标准(施工质量技术交底)
净水器需要定期维护保养,这些方法请收好
如何正确修剪蓝莓——修剪时间和技术详解(从修剪时间到技术,教你成为蓝莓专家)
不动产权证书编号的位置及查询方法
不同的刀柄如何影响抓地力和舒适感?
明武宗朱厚照:明君与昏君的争议
偏瘫脑干出血康复训练方法有哪些
民事诉讼如何正确举证?一文详解证据规则
两肺钙化灶是什么意思
炖煮鱼胶燕窝牛奶全攻略:口感醇厚与营养保留的双重秘诀
医生解答:吃坏肚子怎么办
百痛之王:痛风与肾脏的关联
2025年浙江动物医学专业大学排名及录取分数线参考
JAHA前沿:解析主动脉瓣狭窄时主动脉瓣钙化的严重程度与风险分层
双人床上适合做的运动有哪些?教你在床上运动的最佳方法!
植物炭疽病的预防和治疗措施
猫鼻支的原因及护理方法(了解猫鼻支的成因,掌握护理方法,呵护爱猫的鼻子健康)
蒸馏酒和酿造酒的区别,你更适合哪一种?
什么是中国酒,它是如何分类的?
端午节:中国四大传统节日之一
【端午节百科】端午节来历_习俗_饮食_文化 这些端午知识你都知道吗
他是崖山海战的幸存者,他的外孙为他报了仇,还开创出一个新王朝
银行的协定存款和定期存款有何区别?
怎样在银行办理个人大额存单?
法律如何判定诈骗
如何与房主进行有效谈判?这样的谈判有哪些技巧?
教你轻松挑选优质牛油果:六个实用选购技巧