Служба Wake прямо из AlarmManager - PullRequest
8 голосов
/ 16 сентября 2011

В демонстрационной версии https://github.com/commonsguy/cwac-wakeful метод OnAlarmReceiver (BroadcastReceiver) onReceive () вызывается в ответ на Alarm. Метод onReceive () запускает Сервис. Используются два Интента, один получен BroadcastReceiver, а другой Сервисом. Это кажется более сложным, чем должно быть, почему бы просто не получить Службу для получения Намерения от AlamManager?

Я понимаю, что телефон гарантированно не спит, пока onReceive () выполняет, т.е. он обернут блокировкой пробуждения. Я не уверен, предлагает ли класс Service какие-либо подобные гарантии.

Есть ли какой-либо способ запустить Службу непосредственно из Сигнала тревоги, при этом гарантируя, что Телефон будет просыпаться из спящего режима и не будет спать, пока не будет установлена ​​блокировка от пробуждения?

1 Ответ

14 голосов
/ 16 сентября 2011

Это кажется более сложным, чем должно быть, почему бы просто не получить Службу для получения Намерения от AlamManager?

Поскольку Android не гарантирует, что устройство будет оставаться в активном состоянии достаточно долго для вызова getService() PendingIntent. Гарантия только для getBroadcast() PendingIntent - Android гарантирует, что устройство будет бодрствовать (через WakeLock) в течение всего вашего вызова onReceive().

Поверь мне, хотелось бы, чтобы мы пропустили это.

...