Android手机传感器的简单介绍

Android手机传感器的使用

1、传感器的分类

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

2、使用传感器的方法

1、获取SensorManager对象

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

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

获取手机所有的传感器名称
 SensorManager  sensorManager= (SensorManager)getSystemService(Context.SENSOR_SERVICE);
 List 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手机传感器的简单介绍)