Android SensorManager 中的 getSensorList() 与 getDefaultSensor()

2024-01-30

我正在为 Android 编写一个游戏,希望能够使用加速度计进行输入。

我看到有两种获取传感器的方法,一种方法是使用第一个元素SensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER)另一个是SensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER).

The getDefaultSensor doc http://developer.android.com/reference/android/hardware/SensorManager.html#getDefaultSensor%28int%29说它可以返回一个“复合”传感器,所以如果我想要一个“原始”传感器,我应该使用getSensorList.

你知道复合传感器和原始传感器之间有什么区别吗?这也适用于加速度计吗?有人有使用包含多个或复合加速度计的设备的经验吗? (或者其他传感器?)


更新: 他们更新了 Lollipop 中的 getDefaultSensor 方法,现在有一个区别:

public Sensor getDefaultSensor(int type) {
    // TODO: need to be smarter, for now, just return the 1st sensor
    List<Sensor> l = getSensorList(type);
    boolean wakeUpSensor = false;
    // For the following sensor types, return a wake-up sensor. These types are by default
    // defined as wake-up sensors. For the rest of the SDK defined sensor types return a
    // non_wake-up version.
    if (type == Sensor.TYPE_PROXIMITY || type == Sensor.TYPE_SIGNIFICANT_MOTION ||
            type == Sensor.TYPE_TILT_DETECTOR || type == Sensor.TYPE_WAKE_GESTURE ||
            type == Sensor.TYPE_GLANCE_GESTURE || type == Sensor.TYPE_PICK_UP_GESTURE) {
        wakeUpSensor = true;
    }

    for (Sensor sensor : l) {
        if (sensor.isWakeUpSensor() == wakeUpSensor) return sensor;
    }
    return null;
}

因此,如果有多个传感器可用于指定类型,getDefaultSensor 将返回非唤醒版本(除非默认类型是上面实际定义为唤醒传感器的 6 种类型之一)

顺便说一句,Sensor.TYPE_TILT_DETECTOR、Sensor.TYPE_WAKE_GESTURE、Sensor.TYPE_GLANCE_GESTURE 和 Sensor.TYPE_PICK_UP_GESTURE 隐藏在 SDK 中,因为它们仅用于系统 UI。 Sensor.java 源代码中有更多关于它们的详细信息

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android SensorManager 中的 getSensorList() 与 getDefaultSensor() 的相关文章

随机推荐