Android Things:用户驱动-传感器

本文介绍了如何在Android Things平台上开发自定义传感器驱动。通过继承UserSensorDriver类并实现read()方法,你可以连接并扩展支持新类型的传感器,如超声波传感器HCSR40。文章详细阐述了注册传感器驱动、描述传感器特性和创建传感器驱动的步骤,并提供了实际案例和代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、传感器简介


Android传感器框架支持多种传感器类型来测量物理环境的状况,并且从应用程序读取原始数据。使用传感器驱动,你的应用可以扩展框架,并且添加新的通过Peripheral I/O连接的传感器设备;
和Android内置的传感器一样,来自这些传感器的数据通过相同的SensorManager API进行分发。你的应用可以实现一个驱动程序来连接一个已知类型的新传感器,如加速度计,或者一个Android目前没有定义的传感器类型,如血糖传感器。

二、使用步骤


要实现我们自己的传感器驱动,有如下步骤:

  1. 继承UserSensorDriver类并且覆盖read():

    • 当监听器被注册用于传感器更新,框架定期轮询驱动程序。为了响应轮询请求新数据,继承UserSensorDriver类并且覆盖read()方法。每次调用读应该返回一个新的usersensorreading包含当前的传感器数据。
    • 框架可能在驱动没有产生传感器读取数据的时候调用read()方法。当这个发生的时候,你的驱动将会抛出一个IOException。

    注意: 更多关于已知传感器类型的数据格式信息,请查阅Sensor event values。

    UserSensorDriver mDriver = new UserSensorDriver() {
        // Sensor data values
        float x, y, z;
        @Override
        public UserSensorReading read() {
            try {
                // ...read the sensor hardware...
    
                // Return a new reading
                return new UserSensorReading(new float[]{x, y, z});
            } (catch Exception e) {
                // Error occurred reading the sensor hardware
                throw new IOException("Unable to read sensor");
            }
        }
    };
    • 如果您的传感器支持低功耗或睡眠模式,覆盖你的驱动实现的setEnabled()方法来激活它们。框架调用这个方法与为这传感器应该加紧提供读数,或者为节省电力而休眠;
    UserSensorDriver mDriver = new UserSensorDriver() {
        ...
        // Called by the framework to toggle low power modes
        @Override
        public void setEnabled(boolean enabled) {
            if (enabled) {
                // Exit low power mode
            } else {
                // Enter low power mode
            }
        }
    };

    注意:没有低功耗模式的传感器仍然可以使用此回调来增加或减少数据的报告频率以管理功耗;

  2. 描述传感器:
    向Android框架添加一个新的传感器驱动:

    • 使用UserSensor.Builder来声明传感器的类型。对于大多数app,传感器类型应该匹配Android现有的已知传感器类型之一。
    • 提供传感器名称和你的驱动供应商名称。
    • 向Builder应用你的传感器的范围,分辨率,更新频率(延迟),和电源要求(如果有的话)。这些值将会帮助框架根据SensorManager接收到的请求选择最好的传感器。
    • 使用setDriver()方法设置你的UserSensorDriver实现。
    UserSensor accelerometer = UserSensor.builder()
            .setName("GroveAccelerometer")
            .setVendor("Seeed")
            .setType(Sensor.TYPE_ACCELEROMETER)
            .setDriver(mDriver)
            .build();
    • 当实现了一个Android没有定义的传感器类型时:
    • 在builder中使用setCustomType()替代setType();
    • 提供一个数字传感器类型,是TYPE_DEVICE_PRIVATE_BASE或者更大;
    • 包含一个传感器类型的唯一字符串名称。这个名字应该是系统范围唯一的,因此建议使用反向符号;
    • 包含传感器的报告模式;
    UserSensor custom = UserSensor.builder()
            .setName("MySensor")
            .setVendor("MyCompany")
            .setCustomType(Sensor.TYPE_DEVICE_PRIVATE_BASE,
                    "com.example.mysensor",
                    Sensor.REPORTING_MODE_CONTINUOUS)
            .setDriver(mDriver)
            .build();
  3. 注册传感器

    • 通过使用UserDriverManager注册它,将你的新的传感器连接到框架上:
    public 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值