Android не выходит из спящего режима при движении с устройством

Итак, немного предыстории, я разрабатываю приложение для отслеживания местоположения. У меня есть служба, которая получает обновления GPS, используя поставщика плавких местоположений. Когда приложение закрывается или устройство заблокировано, моя служба перемещается на передний план. Он также использует частичную блокировку пробуждения и внесен в белый список.

У меня сложилось впечатление, что устройство должно выйти из спящего режима, если оно движется. Как указано в этом ответе здесь. Однако я вижу противоречивые результаты на разных устройствах. У меня есть три тестовых устройства. Sony Experia, Moto E4 Plus и Nexus 5x. Приложение отлично работает на сони и нексусе. Я оставляю его бездействующим, включается режим ожидания, а затем, когда я перемещаю устройство, он выходит из режима ожидания, и обновления GPS начинаются снова. Это здорово, потому что мне не нужны обновления GPS, когда устройство находится в стационарном состоянии, это просто потратит заряд батареи. Просто для ясности разные версии Android для каждого устройства:

Sony Xperia: 7.0
Moto E4 plus: 7.1.1
Nexus 5X: 8.0

Проблема с мото, я оставляю устройство, чтобы перейти в режим сна. Однако, подняв его и двигаясь вместе с ним, он не выходит из спящего режима. Он выходит из режима ожидания только при некотором взаимодействии с пользователем. После просмотра других ответов и документации по андроидам я прав, предполагая, что перемещение устройства всегда должно приводить к тому, что оно находится в спящем режиме. Если это так, то это, скорее всего, проблема с оборудованием, или OEM-производитель может изменить способ работы режима ожидания?

Спасибо за любую помощь.


person Tony_89    schedule 30.07.2018    source источник


Ответы (2)


Таким образом, Android должен иметь возможность обнаруживать движение, чтобы выйти из режима сна. Мото не имеет гироскопа. Это останавливает обнаружение движения и выход из спящего режима.

person Tony_89    schedule 30.07.2018

Чтобы эта функция работала, производитель должен был внедрить датчик значительного движения. Вы можете проверить, доступен ли этот датчик, спросив, существует ли этот датчик: android.sensor.significant_motion.

SensorManager mSensorManager = (SensorManager) mContext.getSystemService(Service.SENSOR_SERVICE);
boolean isSensorPresent = mSensorManager.getDefaultSensor(Sensor.TYPE_SIGNIFICANT_MOTION) != null;

Кроме того, некоторые производители обходят правила режима Doze с помощью собственной системы управления питанием. Например, это относится к некоторым телефонам производства Huawei и Xiaomi. В этих случаях можно остановить систему управления питанием производителя, чтобы приостановить работу вашего приложения. Но это должно быть сделано пользователем вручную.

person Nicolas Julémont    schedule 14.01.2021