从2中的例子我们可以大概地总结下获取Sensor传感器以及获取传感器相关的一些信息流程如下:
Step 1:获得传感器管理器:
SensorManager sm = (SensorManager)getSystemService(SENSOR_SERVICE);
List<Sensor> allSensors = sm.getSensorList(Sensor.TYPE_ALL);
for(Sensor s:allSensors){ sensor.getName(); //获得传感器名称 sensor.getType(); //获得传感器种类 sensor.getVendor(); //获得传感器供应商 sensor.getVersion(); //获得传感器版本 sensor.getResolution(); //获得精度值 sensor.getMaximumRange(); //获得最大范围 sensor.getPower(); //传感器使用时的耗电量 }
一般我们是很少说直接去获取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传感器对象,以及传感器的延时时间的精度密度,有四个可选值:
当然低延时意味着更频繁的检车,更意味着更多的电量消耗,如果不是要求精度非常高的建议别使用太高精度的,一般用第三个较多~自己衡量衡量吧~
~Step 5:监听器的取消注册:
用完就放,一个很好的习惯,一般我们可以把他写到Activity或者Service的销毁方法中:
ms.registerListener(mContext, mSensorOrientation, android.hardware.SensorManager.SENSOR_DELAY_UI);
好的,套路非常简单~
文章出处:www.runoob.com/w3cnote/android-tutorial-sensor1.html