¿Cuál es la manera apropiada, no obsoleta de despertar el dispositivo?

Mi requisito es: después de que llegue un mensaje de GCM , el dispositivo debe despertar para mostrar una notificación de alta prioridad. El dispositivo debe encender la pantalla .

Actualmente estoy usando WakeLock para lograr esto. El método newWakeLock() espera que se pase un nivel de bloqueo Y un indicador (como el 1 º param, bit a bit or'd).

Estoy usando PowerManager.ACQUIRE_CAUSES_WAKEUP flag ya que hace exactamente lo que necesito. Sin embargo, estoy un poco frustrado por el nivel de bloqueo. Así que según los documentos , tengo las siguientes opciones:

  • PARTIAL_WAKE_LOCK : no es compatible con ACQUIRE_CAUSES_WAKEUP / no ACQUIRE_CAUSES_WAKEUP la pantalla
  • SCREEN_DIM_WAKE_LOCK – obsoleto
  • SCREEN_BRIGHT_WAKE_LOCK – obsoleto
  • FULL_WAKE_LOCK : obsoleto

El FLAG_KEEP_SCREEN_ON sugerido es completamente inútil en este escenario. Terminé simplemente suprimiendo la advertencia de la depreciación:

 @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(); 

La pregunta : ¿hay una manera confiable no obsoleta de despertar el dispositivo en el caso descrito?

EDIT No estoy pidiendo soluciones para despertar el dispositivo. Mi pregunta es si esto es posible para despertar el dispositivo desde el fondo (sin una Activity ejecución) sin utilizar APIs obsoletas

Utilice el código que obtuve de mi pregunta y, a continuación, acaba de terminar la actividad, debe dejar la pantalla para los usuarios la cantidad normal de tiempo. Confía en mí esta es la única manera, después de pasar una buena semana en este problema. Siempre se puede configurar la actividad a transparente con notitlebar, el usuario nunca sabrá.

  @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(); } 
  • Android: cuando se utiliza LocationManager.requestLocationUpdates, ¿necesito un WakeLock?
  • Android: servicio de primer plano frente a wakeLock
  • Android Espresso, dispositivo de despertar antes de la prueba. ¿Cómo usar un manifiesto personalizado para la prueba?
  • Administrador de alarmas que no funciona en intervalos de tiempo específicos
  • WakeLock finalizó mientras seguía teniendo error aunque lo estoy lanzando
  • AlarmManager bloquea la sesión al iniciar un servicio
  • Ejecución de una aplicación de Android en la parte superior de la pantalla de bloqueo
  • Adquirir PARTIAL_WAKELOCK cada 10 segundos
  • Relación Bluetooth y WakeLock de Android
  • ¿Cómo despertar un teléfono de forma remota?
  • Vida de la aplicación Android: tal vez infinita?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.