什么是传感器?
- 大家觉得什么是传感器呢?
- 看看手机上哪些应用使用了传感器?
- 比如微信中“附近的人”、“摇一摇”、游戏“神庙逃亡”、“狂野飙车”等等
- 它们可以做什么?
- 温度、压力、湿度、光线?
- 传感器能让你的手机实现各种功能,比如知道你如何拿手机、知道当前光亮度自动调整亮度、知道当前音量、压力等等,那么你知道你的Android手机上都有哪些传感器并且能够读出数据吗?
常用的传感器有哪些?
- 在Android2.3 gingerbread系统中,google提供了11种传感器供应用层使用
-
SENSOR_TYPE_ACCELEROMETER
//加速度 -
SENSOR_TYPE_MAGNETIC_FIELD
//磁力 -
SENSOR_TYPE_ORIENTATION
//方向 -
SENSOR_TYPE_GYROSCOPE
//陀螺仪 -
SENSOR_TYPE_LIGHT
//光线感应 -
SENSOR_TYPE_PRESSURE
//压力 -
SENSOR_TYPE_TEMPRATURE
//温度 -
SENSOR_TYPE_PROXIMITY
//接近 -
SENSOR_TYPE_GRAVITY
//重力 -
SENSOR_TYPE_LINEAR_ACCELERATION
//线性加速度 -
SENSOR_TYPE_ROTATION_VECTOR
//旋转矢量
如何使用这些传感器?
- 获取SensorManager对象
SensorManager sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
- 获取Sensor对象
mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
- 注册Sensor对象
//注册
@Override
protected void onResume() {
super.onResume();
mSensorManager.registerListener(this,mSensor,SensorManager.SENSOR_DELAY_UI);
}
- 重写onAccuracyChanged, onSensorChanged这两个方法
//重写
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
if (sensorEvent.sensor.getType() == Sensor.TYPE_ORIENTATION){
float degree = -sensorEvent.values[0];
RotateAnimation rotateAnimation = new RotateAnimation( mStartDegree,degree, Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f
);
rotateAnimation.setDuration(300);
ImageView.startAnimation(rotateAnimation);
mStartDegree = degree;
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int i) {
}
}
- 注销Sensor对象
//注销
@Override
protected void onPause() {
super.onPause();
mSensorManager.unregisterListener(this);
}
###使用传感器的注意事项
- 并非所有手机都支持所有传感器
- 大部分手持设备和桌面设备都带有加速度和磁力传感器,但带气压计和温度计的设备就少的多了。而且,在一台设备上某类传感器的数量也可以有多个。比如,一台设备可以带有两个重力传感器,每个传感器的量程各不相同。
- 不同的系统版本引入的传感器是不同的
- 比如,很多传感器是自Android1.5(API Level 3)开始引入的,但其中有些并未实现而直至Android2.3(API Level 9)和Android4.0(API Level 14)才引入的。有两个传感器已过时,被更新更好的传感器所替代。
###针对是否有传感功能优化
- 在运行时检测传感器
- `if(mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION)!=null){//Success!There's a pressure sensor.}`
- `else`
- `{//传感器不存在。}`
- 用Android Market过滤器来限定目标设备必须带有指定的传感器配置
- `<uses-feature
android:name="android.hardware.sensor.accelerometer"
android:required="true"/>`
###使用注意事项
- 别忘记注销
- 不要在模拟器上测试你的代码
- 不要阻塞`onSensorChanged()`方法
- 避免使用过时的方法或传感器类型
- 在使用前先验证传感器
- 谨慎选择传感器延时