Установить планировщик заданий, когда экран включен (устройство НЕ находится в режиме ожидания)?

Я знаю, что метод setRequiresDeviceIdle(boolean requiresDeviceIdle) запускает задание, когда устройство находится в режиме ожидания.

Я хочу наоборот: я хочу, чтобы задание выполнялось, когда устройство не находится в режиме ожидания (экран включен, а пользователь использует телефон), и я знаю, что setRequiresDeviceIdle(false) не выполняет задание, потому что говорит «false» означает, что он не требуется, поэтому он будет работать, когда он простаивает, а когда нет.


comment
Я не думаю, что у JobScheduler есть такая возможность.   -  person CommonsWare    schedule 24.02.2017
comment
Что именно ты пытаешься сделать?   -  person ianhanniballake    schedule 24.02.2017
comment
@ianhanniballake Я должен сделать приложение, которое собирает значения с разных датчиков при включенном экране и сохраняет их в файле, а когда есть подключение к Интернету (второе условие, помимо включенного экрана), файл отправляется на сервер. Все это нужно делать в фоновом режиме.   -  person student93    schedule 24.02.2017
comment
Зачем это нужно любому пользователю?   -  person CommonsWare    schedule 24.02.2017
comment
@CommonsWare Мне поручили этот проект, и у меня нет особой свободы изменять инструкции, но в основном цель состоит в том, чтобы собрать огромное количество информации, чтобы алгоритмы искусственного интеллекта работали. Это приложение для краудсенсинга, поэтому понятно, что пользователь не получает от него выгоды, но я заметил, что это вызывает разрядку батареи. Я работаю над тем, чтобы уменьшить его, но до сих пор не знаю, как собрать максимум ата, не потребляя столько энергии.   -  person student93    schedule 24.02.2017


Ответы (1)


Это невозможно через JobScheduler. Если вы хотите запускать поведение на основе включения экрана, вы должны постоянно работать (скорее всего, как служба переднего плана) и программно зарегистрировать BroadcastReceiver прослушивание для ACTION_SCREEN_ON.

Очевидно, что это интенсивное использование памяти и ужасная идея для общего состояния системы, поэтому она не поддерживается JobScheduler (не говоря уже о значительном нехватке памяти, уже имевшемся во время ACTION_SCREEN_ON из-за того, что это является одним из условий выхода из Легкая дремота Android 7.0).

person ianhanniballake    schedule 23.02.2017
comment
спасибо, поэтому я должен подумать о другом подходе, так как это, похоже, разряжает батарею. - person student93; 24.02.2017
comment
Я не понимаю, разве Job Scheduler действительно не предназначен для решения проблем с интенсивным использованием памяти (настраиваемых) прослушивателей вещания? Почему же тогда он не обеспечивает более подходящее для памяти решение таких проблем? - person Jitin; 27.12.2020