Подтвердить что ты не робот

Каков правильный, не устаревший способ пробудить устройство?

Мое требование: после получения сообщения 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

4b9b3361

Ответ 1

Используйте код, который я получил от моего вопроса, а затем просто закончить действие, должен оставить экран включенным для обычного времени пользователя. Поверьте мне, это единственный способ, проведя хорошую неделю по этой проблеме. Вы всегда можете настроить прозрачность с помощью notitlebar, пользователь никогда не узнает.

      @Override
        protected void onCreate(Bundle savedInstanceState) {
          getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON | WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON);
          finish();
    }