美文网首页
传感器思密达

传感器思密达

作者: 兔子的眼睛 | 来源:发表于2016-09-18 21:37 被阅读0次

    什么是传感器?

    • 大家觉得什么是传感器呢?
    • 看看手机上哪些应用使用了传感器?
    • 比如微信中“附近的人”、“摇一摇”、游戏“神庙逃亡”、“狂野飙车”等等
    • 它们可以做什么?
      • 温度、压力、湿度、光线?
    • 传感器能让你的手机实现各种功能,比如知道你如何拿手机、知道当前光亮度自动调整亮度、知道当前音量、压力等等,那么你知道你的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()`方法
    - 避免使用过时的方法或传感器类型
    - 在使用前先验证传感器
    - 谨慎选择传感器延时

    相关文章

      网友评论

          本文标题:传感器思密达

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