getSensorList () и getDefaultSensor () в Android SensorManager - PullRequest
4 голосов
/ 27 сентября 2011

Я пишу игру для Android и хочу иметь возможность использовать акселерометр для ввода.

Я вижу два способа получения датчика, один из них - использовать первый элемент SensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER)а другой - SensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER).

. getDefaultSensor doc говорит, что может вернуть «составной» датчик, поэтому, если я хочу «необработанный» датчик, я должен использовать getSensorList.

Есть идеи, в чем разница между составным или необработанным датчиком?Это относится даже к акселерометру?Кто-нибудь имеет опыт работы с устройствами, которые содержат несколько или составные акселерометры?(Или какой-то другой датчик?)

Ответы [ 2 ]

3 голосов
/ 28 ноября 2014

Обновление: они обновили метод getDefaultSensor в Lollipop, и теперь есть разница:

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поскольку они предназначены для использования только для системного интерфейса.Более подробная информация о них содержится в источнике Sensor.java

.
3 голосов
/ 29 сентября 2011

Документация Google намного опережает их реализацию здесь. Я просмотрел репозиторий кодов (который, кажется, источник 2.3.1) и нашел:

public Sensor getDefaultSensor(int type) {
    // TODO: need to be smarter, for now, just return the 1st sensor
    List<Sensor> l = getSensorList(type);
    return l.isEmpty() ? null : l.get(0);
}

Так что нет никакой реальной разницы (и я не думаю, что они действительно смогут добавить ее позже) между датчиками, возвращенными с getDefaultSensor() и с getSensorList().

...