Как в Moto X и Nexus работает «пробуждение при получении»?

Я видел много приложений, которые дают возможность разбудить экран телефона, просто подняв телефон со стола (не говоря уже о датчике приближения). У всех них есть одна общая черта: эта функция помещает блокировку на устройство и, следовательно, разряжает батарею и, следовательно, время ожидания истекает через заданное время (1-10 минут). Насколько я понимаю, он работает по наблюдению за фронтальной камерой.

Мой вопрос: как тогда телефоны Moto X и Nexus делают это? У них есть эта встроенная функция, но включает ли она вейклок? Круглосуточный вейклок? Или они используют что-то кроме фронтальной камеры? И если да, то почему нет приложения, которое может воспроизвести это поведение на всех телефонах?

Использовать акселерометр было бы просто, я не сомневаюсь, что есть приложение , которое может это сделать.
Мое первое предположение состоит в том, что за акселерометром следит маломощный сопроцессор, поэтому он может работать, не отключая основной процессор. Это не то, что представлено в Android SDK, поэтому любое приложение, делающее это, будет зависеть от устройства.
Ну, есть приложение, которое отслеживает акселерометр для блокировки/разблокировки телефона, Gravity Screen . Что касается устройств, в которые встроена эта возможность, я согласен с @Dan Hulme.
@NicolaBastianello Хорошая находка. Я вижу, что в описании приложения говорится: «Однако [использование батареи] может быть намного выше, если часто использовать функцию «Включить экран движением». Таким образом, держите телефон лицевой стороной вниз, если хотите сэкономить энергию». Так может быть, этот режим использует wakelock, а другие используют обнаружение активности Google Play Services?
@NicolaBastianello у меня это установлено. Он использует wakelock и устанавливает настраиваемый тайм-аут, по умолчанию 10 минут. По истечении этого времени устройство больше не просыпается при поднятии руки (однако датчик приближения продолжает работать)

Ответы (1)

Устройства, такие как Moto X и Nexus 5X/6P, используют концентратор датчиков для реализации этой функции, а именно:

блок микроконтроллера/сопроцессор/DSP, который помогает интегрировать данные с разных датчиков и обрабатывать их. Эта технология может помочь разгрузить эти задания с главного центрального процессора продукта, тем самым экономя потребление батареи и повышая производительность.

Спецификации Android предполагают, что производитель внедрил концентратор датчиков:

Стек датчиков устройства может дополнительно включать концентратор датчиков, полезный для выполнения некоторых низкоуровневых вычислений с низким энергопотреблением, когда SoC может находиться в режиме ожидания. Например, на этих чипах можно выполнять подсчет шагов или объединение датчиков. Это также хорошее место для реализации пакетной обработки датчиков, добавления аппаратных FIFO для событий датчиков. Дополнительную информацию см. в разделе Пакетная обработка.

То, как материализуется концентратор датчиков, зависит от архитектуры. Иногда это отдельный чип, а иногда он включен в тот же чип, что и SoC. Важными характеристиками концентратора датчиков является то, что он должен содержать достаточно памяти для пакетной обработки и потреблять очень мало энергии, чтобы можно было реализовать датчики Android с низким энергопотреблением. Некоторые концентраторы датчиков содержат микроконтроллер для общих вычислений и аппаратные ускорители, позволяющие выполнять вычисления с очень низким энергопотреблением для маломощных датчиков.

Так что доступность этой функции зависит от аппаратной части устройства: если производитель включает концентратор датчиков, то энергопотребление будет оптимизировано, поскольку центральный процессор не задействован. В противном случае единственная возможность — установить специальные приложения (см., например, то, что указано в моем комментарии), которые будут отслеживать акселерометр, что, однако, приведет к более высокому расходу заряда батареи.