传感器
Android sensor framework(传感器框架)支持广泛的各种各样的传感器类型去测量物理环境的情况和从application中读取未曾加工过的数据,使用传感器驱动,你的app能够继承sensor framework和通过外设io添加新的传感器类型。
通过为Android 传感器打造的 sensormanager (传感器管理器)传递来自传感器的数据,你的app能够实现一个driver来连接当前已经存在的传感器(比如加速度传感器和陀螺仪传感器)或者其他类型的外设传感器(血压传感器)
实现传感器驱动
当监听被注册来监测传感器的变化时(个人理解:app中的操作),framework会周期的访问你的driver,此时你的driver通过继承UserSensorDriver类和重写 raad()方法来响应传感器变化的新数据,每一次调用read方法都需要返回一个包含sensor数据的UserSensorReading对象。
注意:想了解更多关于传感器类型的数据格式可以参阅sensor event values
当driver不在产生sensorreading的时候,framework还可能继续调用read方法,此时driver将抛出io Exception,即:
如果你的传感器支持低功耗或者睡眠模式,需要重写你的driver的setEnabled()方法来激活睡眠模式中的传感器,framework(框架)调用这个方法来改变传感器的工作模式,即:
注意:
没有低功耗和睡眠模式的传感器也可以通过这个api来调节传感器的数据上报频率来节省电量
是否激活传感器决定于framework,注意这个api是framework来控制传感器的
描述这个传感器
添加一个新的传感器驱动到framework的步骤:
使用UserSensor.Builder来描述传感器的类型:对于大多数的app,传感器的类型应该匹配Android已经存在的传感器类型之一
提供driver的名字和供应商(vendor name)名字
在传感器被创建的时候设置范围,分辨率,更新频率,电量消耗(如果可以设置),这些参数值有助于框架基于SensorManager接收到的请求选择最好的传感器。
通过方法setDriver()将上面的driver绑定,即:
添加一个Android未定义的传感器方法:
- 在builder的时候,用setCustomType()替换setType().
- 提供的数字型传感器的类型是Type_device_private_base 或者 large
- 为传感器类型定义一个特殊的唯一字串,
- 指定传感器的上报数据模式,即:
注册传感器
通过注册到UserDriverManager,链接你的传感器到framework,即:
app中监听传感器的变化
伴随着驱动正确的注册,app可以使用 已经存在的Android服务sensor framework services从关联的设备中接受更新。
由于driver的注册进程需要花费一些时间,所以在app不能够直接注册监听传感器的变化,SensorManager提供一个DynamicSensorCallback 回调给app,在driver注册完成和driver解除注册完成的时候回调,在回调里面注册sensor监听来监测传感器的变化,即: