后续不断完善
概述
- 动态传感器
这类传感器测量三个轴向上的加速力和旋转力。这个类别中包含加速度计、重力传感器、陀螺仪和旋转矢量传感器。
这类传感器测量各种环境参数,如环境气温、气压、照度和湿度。这个类别中包含气压计、光度计和温度计。
这种传感器测量设备的物理位置。该类别包括屏幕方向传感器和磁力计。
具体类型
传感器 | 说明 | 常见用途 |
---|---|---|
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 | 以百分比测量环境的相对湿度 (%) 表示。 | 监测露点、绝对湿度和相对湿度。 |
以上传感器有的由硬件支持,有的由软件结合多个传感器计算支持
基本使用
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
除了加速度传感器,我们还可以获得其他类型的传感器,如: //* 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);
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);
上一步中注册的监听方法,对应的回调的方法如下
@Override
public void onSensorChanged(SensorEvent event) {
// 回调当前的相关传感器结果
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// 精度发生改变
}
常用方法
List<Sensor> deviceSensors = sensorManager.getSensorList(Sensor.TYPE_ALL);
以下是通过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之间变化!