29.Android(安卓)传感器
29.Android 传感器
- Android 传感器
- Android 传感器介绍
- Android SensorManager
- Sensor的类型
- Sensor API
- Sensor 监听
- SensorEvent中values的x y z含义
- 加速度传感器G-sensor
- 磁力传感器M-sensor
- 方向传感器O-sensor
- 陀螺仪传感器Gyro-sensor
- 光线感应传感器
- 压力传感器
- 温度传感器
- 距离传感器
- 重力传感器GV-sensor
- 线性加速度传感器LA-sensor
- 旋转矢量传感器RV-sensor
Android 传感器介绍
Android的传感器大多都跟手机的硬件有关,有些传感器还跟手机的软件与硬件都相关。
很多人很迷茫,什么叫传感器呀?其实传感器就是一系列手机内部自带的测量仪器。可以用来测量方向、距离、磁力、光线等等(包括你知道的和你很多不知道的)。
Android SensorManager
想要拿到手机上的传感器管理器(SensorManager),还是需要通过Activity.getSystemService(@ServiceName @NonNull String name)
。
// 获取传感器管理器SensorManager sensorManager = (SensorManager) this.getSystemService(Context.SENSOR_SERVICE);// 获得全部的传感器列表List<Sensor> sensors = sensorManager.getSensorList(Sensor.TYPE_ALL);
Sensor的类型
这里介绍主流的11种Sensor。
Type | Name | Value |
---|---|---|
TYPE_ACCELEROMETER | 加速度传感器 | 1 |
TYPE_MAGNETIC_FIELD | 磁力传感器 | 2 |
TYPE_ORIENTATION | 方向传感器 | 3 |
TYPE_GYROSCOPE | 陀螺仪传感器 | 4 |
TYPE_LIGHT | 光线感应传感器 | 5 |
TYPE_PRESSURE | 压力传感器 | 6 |
TYPE_TEMPERATURE | 温度传感器 | 7 |
TYPE_PROXIMITY | 距离传感器 | 8 |
TYPE_GRAVITY | 重力传感器 | 9 |
TYPE_LINEAR_ACCELERATION | 线性加速度传感器 | 10 |
TYPE_ROTATION_VECTOR | 旋转矢量传感器 | 11 |
Sensor API
最大取值范围
Sensor.getMaximumRange()
设备名称
Sensor.getName()
功率
Sensor.getPower()
精度
Sensor.getResolution()
传感器类型
Sensor.getType()
设备供应商
Sensor.getVentor()
设备版本号
Sensor.getVersion()
Sensor 监听
根据传感器的Type获取该Type默认配置的传感器
SensorManager。getDefaultSensor(int type)
以监听加速度传感器为例,可以拿到传感器测量的数据。
// 获取默认加速度传感器 Sensor accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); /** * 传感器监听 * SensorEvent.values[0] = x * SensorEvent.values[1] = y * SensorEvent.values[2] = z */ SensorEventListener listener = new SensorEventListener() { @Override public void onSensorChanged(SensorEvent event) { String info = ""; for (int i = 0; i < event.values.length; i++) { info += "event.values[" + i + "]:" + event.values[i] + "\t"; } Log.i("SensorManagerActivity", info); } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } }; // 给对应传感器添加监听 sensorManager.registerListener(listener, accelerometer, SensorManager.SENSOR_DELAY_NORMAL);
SensorEvent中values的x y z含义
加速度传感器(G-sensor)
x、y、z的值分别表示在x、y、z轴上的加速度。
这三个数值是都到地心引力的影响,单位是m/s^2。
手机平放,x轴默认为0,y轴默认0,z轴默认9.8。
- 向左加速运动,x轴为正值。
- 向右加速运动,x轴为负值。
- 向上加速运动,y轴为负值。
- 向下加速运动,y轴为正值。
磁力传感器(M-sensor)
x、y、z的值分别表示在x、y、z轴上的环境磁场数据。
单位是微特斯拉(micro-Tesla),用uT表示。
同时也能换算成高斯(Gauss),1Tesla=10000Gauss。
方向传感器(O-sensor)
x、y、z的值分别表示在x、y、z轴上的角度数据。
单位是角度。
x、y、z的值详细的角度数据对应为:azimuth、pitch、roll。
azimuth:方位,返回水平时磁北极和Y轴的夹角,范围为0°~360°。
0°=北,90°=东,180°=南,270°=西。pitch:x轴和水平面的夹角,范围为-180°~180°。
当z轴向y轴转动时,角度为正值。roll:y轴和水平面的夹角,范围为-90°~90°。
当x轴向z轴移动时,角度为正值。
陀螺仪传感器(Gyro-sensor)
x、y、z的值分别表示在x、y、z轴上的角加速度数据。
单位是radians/second。
- 水平逆时针旋转,z轴为正。
- 水平顺时针旋转,z轴为负。
- 水平向左旋转,y轴为负。
- 水平向右旋转,y轴为正。
- 水平向上旋转,x轴为负。
- 水平向下旋转,x轴为正。
光线感应传感器
x值表示检测到的实时光线强度, 范围在0~未知(我的手机上最大可以到46000)
单位是lux,是照射到单位面积上的光通量。
光线感应传感器主要用于Android系统的LCD自动亮度功能。
可以根据采样到的光强数值实时调整LCD的亮度。
压力传感器
返回当前的压强(目前我的手机上没有这个传感器 –Moto X Style)。
单位是百帕斯卡hectopascal(hPa)。
温度传感器
返回当前的温度。(目前我的手机上没有这个传感器 –Moto X Style)。
距离传感器
x的值返回物体与手机屏幕的距离。范围为0~100。
单位是厘米。
可用于接听电话时自动关闭LCD屏幕以节省电量。
一些芯片集成了接近传感器和光线传感器两者功能。
重力传感器(GV-sensor)
z值返回重力数据。
地球上,重力数值为9.8,单位是m/s^2。
手机平放,显示的数据和加速度传感器显示的数据一样。
线性加速度传感器(LA-sensor)
线性加速度传感器是加速度传感器减去重力影响获取的数据。
单位是m/s^2。
线性加速度 = 加速度 - 重力
手机平放时,重力数据又和加速数据一样。所以此时,线性加速度的默认数据为:x=0,y=0,z=0。
旋转矢量传感器(RV-sensor)
这个太复杂了!建议不要去玩这个了。
旋转矢量代表设备的方向,是一个将坐标轴和角度混合计算得到的数据。
RV-sensor输出三个数据:
value[0] = x*sin(theta/2)
value[1] = y*sin(theta/2)
value[2] = z*sin(theta/2)
sin(theta/2)是RV的数量级。
RV的方向与轴旋转的方向相同。
RV的三个数值,与cos(theta/2)组成一个四元组。
更多相关文章
- android 重力传感器的使用
- Android传感器API:近距离感应Proximity
- Android_开发 Android传感器(加速度传感器,磁场传感器,光线传感器,方
- Android(安卓)重力感应选号码
- android:screenOrientation属性
- Android传感器、语音识别、定位系统、Google Map API、快捷方式
- ANDROID物联网开发
- Android传感器介绍
- Android方向传感器实践——自己动手做指南针