安卓手机传感器的使用

时间:2021-11-26 09:12:33
 

现在的安卓手机中都有各种各样的传感器,比如加速度传感器、陀螺仪之类的,我现在用的vivo v3手机中总共九种传感器分别为:

lis3dh-accel :三轴加速度传感器

TMD277X-proximity :近距离传感器

TMD277X-light :光线传感器

yas533-orientation :方向传感器

yas533-pseudo-gyro :运动传感器

yas533-linear-acceleration : 线加速度传感器

yas533-rotation-vector :旋转矢量传感器

yas533-gravity :陀螺仪

yas533-mag :磁力传感器

以上传感器是自己写的一个程序测出来的。

操作手机中的传感器无非这几个步骤:

  1. 获取传感器管理者
  2. 获取传感器对象
  3. 注册传感器监听
  4. 在传感器监听中获取数据(数据改变事件)

 

首先第一步:获取传感器管理者

SensorManager sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);//获取传感器管理者

 

sensorManager中有几个重要的方法:

  • getSensorList(int type) 返回list集合,集合中是手机内所有的传感器对象(sensor)
  • getDefaultSensor(int type) 返回type指定的传感器对象,如  Sensor accelSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);  获取的是加速度传感器对象
  • registerListener(SensorListener listener, int sensors, int rate) 注册传感器监听事件

第二步:获取传感器对象

 

Sensor accelSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);//获取传感器对象

 

传感器对象主要用于确定要操作的是什么传感器,上例中是(三轴)加速度传感器

  • Sensor类中有许多 TYPE_xxxx  的int值常量,这些常量每一个表示不同的传感器,主要用于获取传感器对象时确定传感器类型
  • getName() 获得传感器名字
  • getPower() 获得传感器功率,单位不详
  • getResolution() 获得传感器分辨率
  • getType() 获得传感器类型
  • getVendor() 获得传感器制造商
  • getVersion()获得传感器版本

第三步:注册传感器监听事件

使用SensorManager中的

/**
 * 
 * @param listener 监听事件接口
 * @param sensors 传感器对象
 * @param rate 采样率,值必须是 SENSOR_DELAY_NORMAL, SENSOR_DELAY_UI, SENSOR_DELAY_GAME, or SENSOR_DELAY_FASTEST 的其中一个
 */
registerListener(SensorEventListener listener, int sensors, int rate)

 

  • 创建一个类实现监听器的SensorEventListener接口,并且实现其中两个方法:传感器数值改变时回调的 onSensorChanged(SensorEvent event)  方法  、分辨率改变回调的  onAccuracyChanged(int sensor, int accuracy)方法    (重点)
  •  onSensorChanged(SensorEvent event) 方法中使用  event.values 获取float数组,数组的值即为测量值,具体操作方法详见API
  • 第二个参数传入传感器对象
  • 第三个参数时采样率,
    SENSOR_DELAY_NORMAL  200000μs取样一次
    SENSOR_DELAY_UI 60000μs取样一次
    SENSOR_DELAY_GAME   2000μs取样一次
    SENSOR_DELAY_FASTEST   0μs取样一次(以cpu最快取样速率进行)

例如:

sensorManager.registerListener(new accelListener(), accelSensor, SensorManager.SENSOR_DELAY_NORMAL);//注册传感器监听事件
    /**
     * 内部类,实现SensorEventListener 接口
     * @author Administrator
     *
     */
    class accelListener implements SensorEventListener{
        /*
         * 传感器数值改变时回调
         * @see android.hardware.SensorEventListener#onSensorChanged(android.hardware.SensorEvent)
         */
        @Override
        public void onSensorChanged(SensorEvent event) {
            // TODO Auto-generated method stub
            float i= event.values[0];
                        System.out.print(i);
                        }

        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {
            // TODO Auto-generated method stub
            
        }
        
    }    

 

 

Android Develop API   android.hardware有传感器获取方法、算法的详细描述,希望各位亲认真阅读。