传感器

作者: timber_wu | 来源:发表于2016-09-18 11:29 被阅读63次

传感器的定义:

一种物理设备或者生物器官,能够探测、感受外界的信号,物理条件(如光,热, 适度)或化学组成(如烟雾),并将探知的信息传递给其他的设备或者器官!

传感器的种类:

可以从不同的角度对传感器进行划分,转换原理(传感器工作的基本物理或化学 效应);用途;输出信号以及制作材料和工艺等。一般是按工作原来来分:物理传感器与化学传感器 两类!手机上搭载的基本都是物理传感器,手机上搭载的传感器有下面这些:

  • 方向传感器(Orientation sensor)
  • 加速感应器(Accelerometer sensor)
  • 陀螺仪传感器(Gyroscope sensor)
  • 磁场传感器(Magnetic field sensor)
  • 距离传感器(Proximity sensor)
  • 光线传感器(Light sensor)
  • 气压传感器(Pressure sensor)
  • 温度传感器(Temperature sensor)
  • 重力感应器(Gravity sensor,Android 2.3引入)
  • 线性加速感应器(Linear acceleration sensor ,Android 2.3引入)
  • 旋转矢量传感器(Rotation vector sensor,Android 2.3)
  • 相对湿度传感器(Relative humidity sensor,Android 4.0)
  • 近场通信(NFC)传感器(Android 2.3引入),NFC和其他不一样,具有读写功能。

如何使用传感器

  • 获取SensorManager对象
    //获取系统的传感器管理器
    SensorManager sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
  • 获取Sensor对象
    比如这里获取的是方向传感器,想获得什么传感器自己查API~:
    Sensor msensor = sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
  • 注册SensorManager对象(一般在 onResume()方法中注册)
    SensorManager.registerListener(SensorEventListener listener, Sensor sensor, int samplingPeriodUs)
    示例继承了SensorEventListener接口
    sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_UI);//在交互时,对传感器进行注册
    源码中对samplingPeriodUs的四个值的解释
    /** get sensor data as fast as possible /
    public static final int SENSOR_DELAY_FASTEST = 0;//0ms
    /
    * rate suitable for games /
    public static final int SENSOR_DELAY_GAME = 1;//20ms
    /
    * rate suitable for the user interface /
    public static final int SENSOR_DELAY_UI = 2;//60ms
    /
    * rate (default) suitable for screen orientation changes */
    public static final int SENSOR_DELAY_NORMAL = 3;//200ms
  • 重现onAccuracyChanged onSensorChanged这两个方法
    @Overridepublic void onSensorChanged(SensorEvent event)
    {
    //当传感器变化时,调用很频繁,不要阻塞
    if (sensor != null && event.sensor.getType() == Sensor.TYPE_ORIENTATION) {//判断传感器类型
    float degree = -event.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 accuracy) {
    //当精度发生变化时}
  • 注销Sensor对象
    一般可以把它写到Activity或者Service的销毁方法中:
    protected void onPause() {
    super.onPause();
    sensorManager.unregisterListener(this);//一定要及时注销
    }

相关文章

网友评论

      本文标题:传感器

      本文链接:https://www.haomeiwen.com/subject/ivtpettx.html