美文网首页
Android手机传感器的简单介绍

Android手机传感器的简单介绍

作者: 破荒之恋 | 来源:发表于2017-07-10 14:57 被阅读317次

    Android手机传感器的使用

    1、传感器的分类

    • 动作传感器:加速度传感器、重力传感器、陀螺仪等
    • 位置传感器:方向传感器、磁力传感器
    • 环境传感器:温度传感器、压力传感器、亮度传感器

    2、使用传感器的方法

    1、获取SensorManager对象

    2、执行SensorManager对象的getDefaultSeneor()方法获取Sensor对象

    3、获取Sensor对象的各种属性

    获取手机所有的传感器名称
     SensorManager  sensorManager= (SensorManager)getSystemService(Context.SENSOR_SERVICE);
     List<Sensor> sensorList = sensorManager.getSensorList(Sensor.TYPE_ALL);
     for (Sensor sensor:sensorList){
          Log.i(TAG, "--onClick: "+sensor.getName());
     }
    //获取指定类型的传感器
      Sensor lightSensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
      String name = lightSensor.getName();
      Log.i(TAG, "-----name: "+name);
    
    传感器的采样率

    采样率越低越好;

    设置传感器原则:尽量使用比较低的传感器采样率,这样就可以使系统负荷最小,同时可以省电。

    SENSOR_DELAY_NOMAL(200000微秒)//系统负荷最低,但是传感器反应最慢。
    SENSOR_DELAY_UI(60000微秒)
    SENSOR_DELAY_GAME(20000微秒)
    SENSOR_DELAY_FASTEST(0微秒)//精确度最高
    
    传感器的属性
    • 传感器名称:
    • 传感器制造商:
    • 传感器功率:
    • 传感器的resulotion:
     lightSensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
        sensorManager.registerListener(new SensorEventListener() {
            @Override
            public void onSensorChanged(SensorEvent event) {
    
                String sensorName = event.sensor.getName();
                String sensorVendor = event.sensor.getVendor();
                float resolution = event.sensor.getResolution();
                float power = event.sensor.getPower();
                long timestamp = event.timestamp;
    
                Log.i(TAG, "sensorName: "+sensorName);
                Log.i(TAG, "sensorVendor: "+sensorVendor);
                Log.i(TAG, "resolution: "+resolution);
                Log.i(TAG, "power: "+power);
                Log.i(TAG, "timestamp: "+timestamp);//时间
                int type = event.sensor.getType();
    
    
            }
    
            @Override
            public void onAccuracyChanged(Sensor sensor, int accuracy) {
    
            }
        },lightSensor,SensorManager.SENSOR_DELAY_GAME);
    
    传感器加速度的计算方法
    手机三维坐标系统
    获取手机加速度的值
    加速度值的过滤
    private float gravity[]=new float[3];
    private float linear_acceleration[]=new float[3];
    
        taoSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        sensorManager.registerListener(new SensorEventListener() {
            @Override
            public void onSensorChanged(SensorEvent event) {
    
               /* float value0 = event.values[0];//x坐标
                float value1 = event.values[1];//y坐标
                float value2 = event.values[2];//z坐标
                Log.i(TAG, "--onSensorChanged: "+value0);
                Log.i(TAG, "--onSensorChanged: "+value1);
                Log.i(TAG, "--onSensorChanged: "+value2);*/
    
               float alpha=0.8f;
                gravity[0]=alpha*gravity[0]+(1-alpha)*event.values[0];
                gravity[1]=alpha*gravity[1]+(1-alpha)*event.values[1];
                gravity[2]=alpha*gravity[2]+(1-alpha)*event.values[2];
    
                linear_acceleration[0]=event.values[0]-gravity[0];
                linear_acceleration[1]=event.values[1]-gravity[1];
                linear_acceleration[2]=event.values[2]-gravity[2];
    
                Log.i(TAG, "----x-加速度---onSensorChanged: "+linear_acceleration[0]);
                Log.i(TAG, "----y--加速度---onSensorChanged: "+linear_acceleration[1]);
                Log.i(TAG, "----z--加速度---onSensorChanged: "+linear_acceleration[2]);
    
    
            }
    
            @Override
            public void onAccuracyChanged(Sensor sensor, int accuracy) {
    
            }
        },taoSensor,SensorManager.SENSOR_DELAY_NORMAL);
    
    方向传感器的作用

    通过方向传感器可以获取设备与地球磁场北极之间的夹角:

    1、Azimuth:设备围绕Z轴旋转的角度,y轴与地磁北极之间的夹角,取值范围在0至360度之间;

    2、Pitch:设备围绕X轴旋转的角度。当Z轴向y轴的正方向旋转时,该值为正数,反之则为负数,取值范围在-180至180度之间。

    3、Roll:设备围绕y轴旋转的角度,当z轴向x轴正方向旋转时,该值为正数,反之则为负数,取值范围在-90至90之间;

    距离传感器的作用

    判断设备与用户的脑袋之间的距离,实现接口SensorEventListener

    sensorManager= (SensorManager)getSystemService(Context.SENSOR_SERVICE);
     mProximity = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
    
    @Override
    public void onSensorChanged(SensorEvent event) {
        float disatce = event.values[0];
        Log.i(TAG, "----disatce---: "+disatce);
        Log.i(TAG, "----disatce---: "+mProximity.getMaximumRange());
    }
    
    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
    
    }
    
    @Override
    protected void onResume() {
        super.onResume();
    
        sensorManager.registerListener(this,mProximity,SensorManager.SENSOR_DELAY_NORMAL);
    }
    
    @Override
    protected void onPause() {
        super.onPause();
        sensorManager.unregisterListener(this);
    }

    相关文章

      网友评论

          本文标题:Android手机传感器的简单介绍

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