Android传感器Sensor
引入:
手机内置的传感器是一种微型的物理设备,它能够探测、感受外界的信号,将来自真实世界的数据提供给应用程序,应用程序然后使用传感器数据向用户通知真实世界的情况,或用来控制游戏进度、或实现增强现实等。至于具体如何去利用这些信息就要充分发挥开发者的想象力了。
传感器目前已经成为了智能手机的标配。比较常见的传感器有:方向传感器、磁场传感器、温度传感器、光传感器、压力传感器、加速度传感器、重力传感器、陀螺仪传感器等。传感器就像一个个触手,不断采集着外部的信息,并将这些信息传送回手机进一步处理。在Android的特色开发技术中,除了基于位置的服务外,传感器技术绝对是最值得期待的技术。通过在Android应用中添加传感器,可以充分激发开发者的想象力,开发出各种新奇的程序。比如电子罗盘、水平仪,各种感知型游戏。
目前Android设备中可能出现的一些传感器类型包括:
• 方向传感器
• 磁场传感器
• 温度传感器
• 光传感器
• 压力传感器
• 加速度计
• 距离传感器
• 陀螺仪传感器
• 重力传感器(Android2.3开始)
• 线性加速度传感器(Android2.3开始)
• 旋转矢量传感器(Android2.3开始)
• 相对湿度传感器(Android2.3开始)
• NFC(近场通信)传感器(Android2.3开始):NFC传感器与其他传感器不同,因为它使用与其他传感器完全不同的方式来访问。
如何使用
在android系统中开发传感器应用很简单,因为android系统为传感器支持提供了强大的管理服务。
开发传感器的应用步骤如下:
1.调用context的getsystemservice(context.SENSOR_SERVICE)方法获取SensorManager对象,
SensorManager对象代表系统的传感器管理服务。
2.调用SensorManager的getDefaultSensor(int type)方法来获取指定类型的传感器。
3,实现SensoreEventListener接口。
4.通常选择在activity的onResume()方法中调用SensorManager的registerListener()方法为指定的传感器注册监听器(SensoreEventListener),程序通过监听器(onSensorChanged())回调即可获取传感器传回来的事件数据。
5,在onPause中 unRegisterListener(),取消监听传感器数据;
Android中常用的传感器
1.方向传感器
a)方向传感器用于感应手机设备的摆放状态,方向传感器可以返回三个角度,这三个角度即可确定手机的摆放状态。
关于方向传感器返回的三个角度说明如下:
第一个角度:表示手机顶部朝向与正北方的夹角,当手机绕着z轴旋转时,该角度值发生变化。
第二个方向:表示手机顶部与尾部翘起来的角度,当手机绕着x轴倾斜时,该角度值发生变化。
第三个方向:表示手机左侧或者右侧翘起的角度。当手机绕着y轴倾斜时,该角度值发生变化。
2.陀螺仪传感器
陀螺仪传感器用于手机设备的旋转速度,陀螺仪传感器可以返回设备绕x,y,z这三个坐标值
(陀螺仪传感器的坐标系统和加速度传感器的坐标系统完全相同)的旋转速度,旋转速度的单位是弧度/秒,
旋转速度为正值代表逆时针旋转,负值代表顺时针旋转。
返回的三个角速度有如下说明:
第一个值:代表该设备绕x轴旋转的角速度。
第二个值:代表该设备绕y轴旋转的角速度。
第三个值:代表该设备绕z轴旋转的角速度。
3.磁场传感器
磁场传感器主要用于读取手机设备外部的磁场强度,即使周围没有任何直接的磁场,手机设备也始终处于
地球的磁场中,随着手机设备摆放状态的改变,周围的磁场在手机的x,y,z方向上的影响也会发生改变。
磁场传感器会返回三个数据,分别代表周围磁场分解到x,y,z三个方向上的磁场分量,磁场数据的单位是微特斯拉。
4.重力传感器
重力传感器会返回一个三维向量,这个三维向量可显示重力的方向和强度,重力传感器的坐标系统和
加速度传感器的坐标系统是相同的。
当设备处于静止状态时,重力传感器的输出,与加速度传感器的输出应该是相同的。
5.线性加速度传感器
线性加速度返回一个三维向量,可显示在各方向上的加速度(不包含重力加速度)。线性加速度传感器的
坐标系统与加速度传感器的坐标系统相同。
6.温度传感器
温度传感器用于获取手机设备所处的环境的温度,温度传感器会返回一个数据,代表手机设备周围的温度,
单位是摄氏度。
7.光传感器
光传感器用于获取手机设备所处环境的光的强度,光传感器会返回一个数据,代表手机设备周围光的强度。
单位勒克斯。
8.压力传感器
压力传感器用于获取手机设备所处环境的压力的大小,压力传感器会返回一个数据,代表设备周围压力的大小。
android5.0新增的心率传感器
心率传感器是5.0新增的一种传感器
可以通过如下方式获取所有传感器
SensorManager mSensorManager;
List sensorList;
// 实例化传感器管理者
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
// 得到设置支持的所有传感器的List
sensorList = mSensorManager.getSensorList(Sensor.TYPE_ALL);
List sensorNameList = new ArrayList();
for (Sensor sensor : sensorList) {
Log.d(TAG, "onResume: "+sensor.getName());
}
private SensorManager sm;
//创建一个SensorManager来获取系统的传感器服务
sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
/*
- 最常用的一个方法 注册事件
- 参数1 :SensorEventListener监听器
- 参数2 :Sensor 一个服务可能有多个Sensor实现,此处调用getDefaultSensor获取默认的Sensor
- 参数3 :模式 可选数据变化的刷新频率,多少微秒取一次。
- */
//加速度传感器
sm.registerListener(this, sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);
@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];
mtextViewx.setText(X_lateral + “”);
mtextViewy.setText(Y_longitudinal + “”);
mtextViewz.setText(Z_vertical + “”);
}
}
其他类似.
代码实现
// An highlighted block
var foo = 'bar';