Мое требование: после получения сообщения GCM устройство должно проснуться, чтобы отобразить высокоприоритетное уведомление. Устройство должно включить экран.
В настоящее время я использую WakeLock для достижения этой цели. Метод newWakeLock()
ожидает уровень блокировки И флаг должен быть передан (как 1-й параметр, побитовое или -d).
Я использую флаг PowerManager.ACQUIRE_CAUSES_WAKEUP
, поскольку он делает именно то, что мне нужно. Тем не менее, я немного разочарован уровнем блокировки. Итак, согласно docs, я получил следующие варианты:
-
PARTIAL_WAKE_LOCK
- не совместим сACQUIRE_CAUSES_WAKEUP
/не включает экран -
SCREEN_DIM_WAKE_LOCK
- устаревший -
SCREEN_BRIGHT_WAKE_LOCK
- устаревший -
FULL_WAKE_LOCK
- устаревший
Предлагаемый FLAG_KEEP_SCREEN_ON
полностью бесполезен в этом сценарии. Я закончил тем, что просто подавил предупреждение об отказе:
@SuppressWarnings("deprecation")
PowerManager.WakeLock screenOn = ((PowerManager) c.getSystemService(Context.POWER_SERVICE)).newWakeLock(
PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, TAG);
screenOn.acquire();
mNotifyMgr.notify(mNotificationId, mBuilder.build());
screenOn.release();
Вопрос: существует ли непринужденный надежный способ пробуждения устройства в описанном случае?
EDIT Я не прошу об обходах, чтобы разбудить устройство. Мой вопрос заключается в том, можно ли пробудить устройство из фона (без запуска Activity
) без использования устаревших API