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?

2 Solutions collect form web for “Desactivar ocultar una presentación (pantalla secundaria)”

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).

  • Ninguna llamada a onStartCommand () sigue al reinicio de un servicio bloqueado en Android 2.3
  • Buenas prácticas para la comunicación asíncrona entre servicios
  • Obtención de resultados de varias AsyncTasks
  • ¿Cómo utilizo Android SpeechRecognizer como servicio?
  • Mantener viva Servicio de Intención después de que la aplicación es asesinada
  • Servicio en android?
  • Excepción de puntero nulo iniciando IntentService
  • ¿Es posible crear el widget como Google Play Música en la pantalla de bloqueo?
  • Servicio y un BroadCastReceiver
  • Tarea del temporizador VS Uso del administrador de alarmas en el servicio de Android
  • Subir archivo grande en segundo plano (el servicio se reinicia cuando la aplicación se cierra)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.