传感器思密达

2016-09-18  本文已影响0人  兔子的眼睛

什么是传感器?

常用的传感器有哪些?

如何使用这些传感器?

SensorManager sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);

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()`方法
- 避免使用过时的方法或传感器类型
- 在使用前先验证传感器
- 谨慎选择传感器延时
上一篇下一篇

猜你喜欢

热点阅读