Я внедрил службу Android (START_STICKY
), которая начинается с загрузки устройства и работает в фоновом режиме. Функциональность этой услуги заключается в взаимодействии с SD-картой. Поскольку он работает непрерывно, он запускается с липкой батареей. Чтобы решить проблему с интенсивным потреблением батареи, я хотел начать эту услугу, когда пользователь использует устройство.Как запустить фоновое обслуживание, когда пользователь начинает использовать Android-устройство?
Идеальное начало/остановка на основе ACTION_SCREEN_ON
& ACTION_SCREEN_OFF
намерения.
Когда я проверил это обнаружил, что я не могу зарегистрировать ACTION_SCREEN_OFF
& ACTION_SCREEN_ON
в манифесте, так что я создал приемник вещания в моей службе, чтобы захватить ACTION_SCREEN_OFF
& ACTION_SCREEN_ON
.
Но, поскольку я не могу зарегистрироваться для намерений в манифесте, когда я останавливаю свое обслуживание на ACTION_SCREEN_OFF
. Как я могу запустить его, когда экран возвращается?
Примечание: Как я уже говорил SCREEN_ON
+ SCREEN_OFF
не может быть зарегистрирован в файле манифеста. Зарегистрировано как
// REGISTER RECEIVER THAT HANDLES SCREEN ON AND SCREEN OFF LOGIC
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
broadcastReceiver = new TestReceiver();
registerReceiver(broadcastReceiver, filter);
Поэтому, когда служба не работает, это намерение не срабатывает.
Ну, в вашем BroadcastReceiver для SCREEN_ON + SCREEN_OFF, просто вперед их к службе через StartService с таким же действием. В сервисе вы можете проверить onStartCommand, какое действие имеет намерение, если это screen_on -> запустить службу, если это screen_off, служба уже должна быть запущена, поэтому вы ее отключите. – damian
Как я уже говорил, SCREEN_ON + SCREEN_OFF не может быть зарегистрирован в файле манифеста. SO, когда сервис не запускается, он не будет вызван. – Sachin
Аналогичный вопрос: http://stackoverflow.com/questions/9477922/android-broadcast-receiver-for-screen-on-and-screen-off, и ответ заключался в том, что вам нужно использовать долгосрочное обслуживание (липкое). – aleung