传感器思密达

什么是传感器?

  • 大家觉得什么是传感器呢?
  • 看看手机上哪些应用使用了传感器?
  • 比如微信中“附近的人”、“摇一摇”、游戏“神庙逃亡”、“狂野飙车”等等
  • 它们可以做什么?
    • 温度、压力、湿度、光线?
  • 传感器能让你的手机实现各种功能,比如知道你如何拿手机、知道当前光亮度自动调整亮度、知道当前音量、压力等等,那么你知道你的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过滤器来限定目标设备必须带有指定的传感器配置
 - ``

###使用注意事项
- 别忘记注销
- 不要在模拟器上测试你的代码
- 不要阻塞`onSensorChanged()`方法
- 避免使用过时的方法或传感器类型
- 在使用前先验证传感器
- 谨慎选择传感器延时

你可能感兴趣的:(传感器思密达)