Desactivar ocultar una presentación (pantalla secundaria)

Estoy trabajando en un proyecto que debe mostrar una pequeña presentación en una pantalla secundaria (API 4.2). Hasta ahora todo está funcionando bien. Pero si cierro la aplicación no puedo evitar que se cierre la presentación. Me gustaría crear una aplicación que está iniciando un servicio de fondo que está inicializando la presentación. Para que el usuario sólo vea un icono de notificación en la barra de estado, pero el servicio está transmitiendo el contenido a la pantalla secundaria.

¿Alguna idea si esto podría ser realizado? Lo intenté con el servicio de fondo, pero no sé qué contexto debo utilizar. Lo intenté con

getApplicationContext() 

Pero luego recibo una excepción:

 Unable to add window -- token null is not for an application 

Si utilizo un método estático como getAppContext() (conozco un hack feo) mostrará la presentación pero también la ocultaré si cierra la aplicación.

¿Algunas ideas?

Cree un servicio que utilice Context.createDisplayContext (Display) para obtener un nuevo administrador de ventanas para su pantalla secundaria. Así funciona la presentación.

Eche un vistazo a este enlace como un ejemplo: http://www.java2s.com/Open-Source/Android/android-core/platform-frameworks-base/com/android/server/LoadAverageService.java.htm

En onCreate () en lugar de obtener el WindowManagerImpl:

 public void onCreate(){ ... WindowManagerImpl wm = (WindowManagerImpl)getSystemService(WINDOW_SERVICE); wm.addView(mView, params); } 

Llame a un método como este:

 private void addView(WindowManager.LayoutParams params){ DisplayManager dm = (DisplayManager) getApplicationContext().getSystemService(DISPLAY_SERVICE); if (dm != null){ Display dispArray[] = dm.getDisplays(); if (dispArray.length>0){ Context displayContext = getApplicationContext().createDisplayContext(dispArray[1]); WindowManager wm = (WindowManager)displayContext.getSystemService(WINDOW_SERVICE); wm.addView(mView, params); } } } 

Su vista se agregará a la pantalla secundaria y, dado que ésta se ejecuta por un servicio, su actividad que se ejecuta en la pantalla principal no se detiene

¿Alguna idea si esto podría ser realizado?

Dado que Presentation es una subclase de Dialog , su Presentation sólo puede ser visible cuando tiene la actividad que la aloja en primer plano.


ACTUALIZAR

La respuesta de icarmel funciona, aunque falta algunos detalles. Tengo un PresentationService ahora en mi biblioteca CWAC-Presentation que ofrece una implementación de trabajo completa de la técnica. Para responder a mi pregunta en mi comentario sobre la respuesta de icarmel, se utiliza WindowManager.LayoutParams.TYPE_SYSTEM_ALERT en WindowManager.LayoutParams , que a su vez requiere el permiso SYSTEM_ALERT_WINDOW (por desgracia).

  • Android Speech Reconocimiento de voz: Llamada repetida de SpeechRecognizer.startListening () falla en JB 4.1.2
  • ¿Cómo evitar que el servicio se detenga cuando onTaskRemoved es calles?
  • Android: ¿Es mejor iniciar y detener un servicio cada vez que sea necesario o dejar que un servicio funcione y se vincule y se desvincule de él?
  • ¿Cómo podemos reiniciar el servicio?
  • Servicio externo de Android desde una biblioteca (AAR, no Shared Service)
  • Buenas prácticas para la comunicación asíncrona entre servicios
  • StopService no deja de ser mi servicio ... ¿por qué?
  • Relación entre Foreground Services y PARTIAL_WAKE_LOCK
  • Solicitar contraseña antes de desinstalar la aplicación
  • Android escucha los mensajes del socket del servidor
  • Ciclo de vida de BroadcastReceiver
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.