Sensor传感器相关的方法以及使用套路

Sensor传感器相关的方法以及使用套路

从2中的例子我们可以大概地总结下获取Sensor传感器以及获取传感器相关的一些信息流程如下:

1)Sensor传感器的相关方法

Step 1:获得传感器管理器

SensorManager sm = (SensorManager)getSystemService(SENSOR_SERVICE); 
  • Step 2:获得设备的传感器对象的列表
List<Sensor> allSensors = sm.getSensorList(Sensor.TYPE_ALL);
  • Step 3:迭代获取Sensor对象,然后调用对应方法获得传感器的相关信息:
for(Sensor s:allSensors){
    sensor.getName();   //获得传感器名称
    sensor.getType();     //获得传感器种类
    sensor.getVendor();    //获得传感器供应商
    sensor.getVersion();    //获得传感器版本
    sensor.getResolution();  //获得精度值
    sensor.getMaximumRange(); //获得最大范围
    sensor.getPower();        //传感器使用时的耗电量 
}

2)传感器的使用套路

一般我们是很少说直接去获取Sensor,然后获取上面这些信息的!因为这没什么大的作用,我们更多的时候是去获取传感器采集到的数据,比如获取当前的大气压,或者方向传感器三个角的值,或者陀螺仪的值这样~而大部分的传感器数据采集都是下面的一个套路:

~Step 1:获得传感器管理器:

SensorManager sm = (SensorManager)getSystemService(SENSOR_SERVICE); 

~Step 2:调用特定方法获得需要的传感器:

比如这里获取的是方向传感器,想获得什么传感器自己查API~:

Sensor mSensorOrientation = sm.getDefaultSensor(Sensor.TYPE_ORIENTATION);

~Step 3:实现SensorEventListener接口,重写onSensorChanged和onAccuracyChanged的方法!

onSensorChanged:当传感器的值变化时会回调

onAccuracyChanged:当传感器的进度发生改变时会回调

@Override
public void onSensorChanged(SensorEvent event) {
    final float[] _Data = event.values;
   this.mService.onSensorChanged(_Data[0],_Data[1],_Data[2]);
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}

我们一般获取传感器数据的来源就是这个SensorEvent,这个类中有一个values的变量,类型是Float[],该变量最多有只有三个元素,而且传感器不同,对应元素代表的含义也不同,比如方向传感器中第一个元素是方位角的值,而气压传感器中第一个值则是气压值!

~Step 4:SensorManager对象调用registerListener注册监听器:

ms.registerListener(mContext, mSensorOrientation, android.hardware.SensorManager.SENSOR_DELAY_UI);

方法也很简单,对应的参数:上下文对象Sensor传感器对象,以及传感器的延时时间的精度密度,有四个可选值:

  • SENSOR_DELAY_FASTEST——延时:0ms
  • SENSOR_DELAY_GAME——延时:20ms
  • SENSOR_DELAY_UI——延时:60ms
  • SENSOR_DELAY_NORMAL——延时:200ms

当然低延时意味着更频繁的检车,更意味着更多的电量消耗,如果不是要求精度非常高的建议别使用太高精度的,一般用第三个较多~自己衡量衡量吧~

~Step 5:监听器的取消注册:

用完就放,一个很好的习惯,一般我们可以把他写到Activity或者Service的销毁方法中:

ms.registerListener(mContext, mSensorOrientation, android.hardware.SensorManager.SENSOR_DELAY_UI);

好的,套路非常简单~


文章出处:www.runoob.com/w3cnote/android-tutorial-sensor1.html

你可能感兴趣的:(Android)