传感器

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的步骤:

  1. 使用UserSensor.Builder来描述传感器的类型:对于大多数的app,传感器的类型应该匹配Android已经存在的传感器类型之一

  2. 提供driver的名字和供应商(vendor name)名字

  3. 在传感器被创建的时候设置范围,分辨率,更新频率,电量消耗(如果可以设置),这些参数值有助于框架基于SensorManager接收到的请求选择最好的传感器。

  4. 通过方法setDriver()将上面的driver绑定,即:

    添加一个Android未定义的传感器方法:

    1. 在builder的时候,用setCustomType()替换setType().
    2. 提供的数字型传感器的类型是Type_device_private_base 或者 large
    3. 为传感器类型定义一个特殊的唯一字串,
    4. 指定传感器的上报数据模式,即:

    注册传感器

    通过注册到UserDriverManager,链接你的传感器到framework,即:

    app中监听传感器的变化

    伴随着驱动正确的注册,app可以使用 已经存在的Android服务sensor framework services从关联的设备中接受更新。

    由于driver的注册进程需要花费一些时间,所以在app不能够直接注册监听传感器的变化,SensorManager提供一个DynamicSensorCallback 回调给app,在driver注册完成和driver解除注册完成的时候回调,在回调里面注册sensor监听来监测传感器的变化,即:

results matching ""

    No results matching ""