Android Things Bmx280驱动程序中Bmx280和Bmx280SensorDriver类之间的差异?

Android Things Bmx280驱动程序中Bmx280和Bmx280SensorDriver类之间的差异?,android,android-sensors,android-things,Android,Android Sensors,Android Things,我正在用Android东西编写一个应用程序,想用它来读取环境值(温度、气压等)。似乎有两种不同的驱动程序:Bmx280和Bmx280SensorDriver。我应该使用哪一个来读取温度值/压力?Bmx280允许您直接与传感器外围设备交互,以便您可以手动从中读取温度样本: private Bmx280 bmx280; try { bmx280 = new Bmx280(i2cBusName); bmx280.setTemperatureOversampling(Bmx280.OV

我正在用Android东西编写一个应用程序,想用它来读取环境值(温度、气压等)。似乎有两种不同的驱动程序:
Bmx280
Bmx280SensorDriver
。我应该使用哪一个来读取温度值/压力?

Bmx280
允许您直接与传感器外围设备交互,以便您可以手动从中读取温度样本:

private Bmx280 bmx280;

try {
    bmx280 = new Bmx280(i2cBusName);
    bmx280.setTemperatureOversampling(Bmx280.OVERSAMPLING_1X);
    float temperature = bmx280.readTemperature();
} catch (IOException e) {
    // handle errors
}

// remember to close bmx280 later
Bmx280SensorDriver
应在系统中注册。在这种情况下,您不直接与硬件交互,而是使用标准Android来监听温度读数:

private Bmx280SensorDriver sensorDriver;
private SensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

try {
    sensorDriver = new Bmx280SensorDriver(BoardDefaults.getI2cBus());
    sensorManager.registerDynamicSensorCallback(mDynamicSensorCallback);
    sensorDriver.registerTemperatureSensor();
} catch (IOException e) {
    // handle errors
}

private SensorManager.DynamicSensorCallback mDynamicSensorCallback
        = new SensorManager.DynamicSensorCallback() {
    @Override
    public void onDynamicSensorConnected(Sensor sensor) {
        if (sensor.getType() == Sensor.TYPE_AMBIENT_TEMPERATURE) {
            // Our sensor is connected. Start receiving temperature data.
            sensorManager.registerListener(mTemperatureListener, sensor,
                    SensorManager.SENSOR_DELAY_NORMAL);
        }
    }

    /* other callbacks omitted */
};

// remember to unregister and close sensorDriver later
后一种方法的好处是,设备可能有其他方法来生成传感器读数,因此您不必仅依靠
Bmx280
,以防其他方法提供更好的读数,或者
Bmx280
停止工作等。(你可以把它想象成Android的融合位置提供者;位置数据可以由不同的提供者在不同的条件下确定,系统会在任何给定的时间尝试报告最佳信息。)此外,系统还负责轮询传感器数据等事情,因此你不必为此创建自己的逻辑


TL;DR——如果您想要按需手动读取传感器数据,可以直接使用
Bmx280
。如果您想要定期轮询传感器读数,而不关心生成数据的内容,请使用
Bmx280传感器驱动程序
SensorManager
API。

Bmx280
允许您直接与传感器外围设备交互ral,以便您可以从中手动读取温度样本:

private Bmx280 bmx280;

try {
    bmx280 = new Bmx280(i2cBusName);
    bmx280.setTemperatureOversampling(Bmx280.OVERSAMPLING_1X);
    float temperature = bmx280.readTemperature();
} catch (IOException e) {
    // handle errors
}

// remember to close bmx280 later
Bmx280SensorDriver
是要在系统中注册的。在这种情况下,您不直接与硬件交互,而是使用标准Android来监听温度读数:

private Bmx280SensorDriver sensorDriver;
private SensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

try {
    sensorDriver = new Bmx280SensorDriver(BoardDefaults.getI2cBus());
    sensorManager.registerDynamicSensorCallback(mDynamicSensorCallback);
    sensorDriver.registerTemperatureSensor();
} catch (IOException e) {
    // handle errors
}

private SensorManager.DynamicSensorCallback mDynamicSensorCallback
        = new SensorManager.DynamicSensorCallback() {
    @Override
    public void onDynamicSensorConnected(Sensor sensor) {
        if (sensor.getType() == Sensor.TYPE_AMBIENT_TEMPERATURE) {
            // Our sensor is connected. Start receiving temperature data.
            sensorManager.registerListener(mTemperatureListener, sensor,
                    SensorManager.SENSOR_DELAY_NORMAL);
        }
    }

    /* other callbacks omitted */
};

// remember to unregister and close sensorDriver later
后一种方法的好处是,设备可能有其他方法来生成传感器读数,因此您不必仅依靠
Bmx280
,以防其他方法提供更好的读数,或者
Bmx280
停止工作等。(你可以把它想象成Android的融合位置提供者;位置数据可以由不同的提供者在不同的条件下确定,系统会在任何给定的时间尝试报告最佳信息。)此外,系统还负责轮询传感器数据等事情,因此你不必为此创建自己的逻辑

TL;DR——如果您想要按需手动读取传感器数据,可以直接使用
Bmx280
。如果您想要定期轮询传感器读数,而不关心数据的生成,请使用
Bmx280SensorDriver
SensorManager
API