Android 传感器的一般使用流程
一般情况下,很少直接去获取 Sensor,然后获取上面这些信息
更多的时候是去获取传感器采集到的数据,比如获取当前的大气压, 或者方向传感器三个角的值,或者陀螺仪的值
Android 对大部分封装了大部分传感器的底层实现,从而暴露统一的接口供开发者调用
所以,使用传感器有一个统一的流程
-
获得传感器管理器
SensorManager sm = (SensorManager)getSystemService(SENSOR_SERVICE);
-
调用特定方法获得需要的传感器
比如下面的代码用于获取方向传感器
Sensor mSensorOrientation = sm.getDefaultSensor(Sensor.TYPE_ORIENTATION);
-
实现 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[] ,该变量最多有只有三个元素 ,而且传感器不同,对应元素代表的含义也不同,比如方向传感器中第一个元素是方位角的值,而气压传感器中第一个值则是气压值 -
SensorManager
对象调用registerListener()
注册监听器ms.registerListener(SensorEventListener, Sensor, int)
参数说明
参数 说明 SensorEventListener 上下文对象 Sensor Sensor 传感器对象 int 传感器的延时时间的精度密度 第三个参数的可能取值如下
值 说明 SENSOR_DELAY_FASTEST 延时 0ms SENSOR_DELAY_GAME 延时 20ms SENSOR_DELAY_UI 延时 60ms (推荐) SENSOR_DELAY_NORMAL 延时 200ms 低延时意味着更频繁的检测,更意味着更多的电量消耗
如果不是要求精度非常高的建议,别使用太高精度的,一般用第三个较多
-
监听器的取消注册
用完就释放,一个很好的习惯,我们可以把他写到 Activity 或者 Service 的销毁方法中
@Override protected void onDestroy() { super.onDestroy(); ms.unregisterListener(this); }
所有的传感器,大概的使用流程都这样,接下来我们会分别介绍几个常用的传感器