Cómo mostrar un cuadro de diálogo de un servicio

He leído muchísimas publicaciones sobre este tema, sin embargo, nada me funciona (o no tiene el efecto que deseo).

Tengo una aplicación que, después de iniciar sesión, inicia un servicio en segundo plano (implementación de la clase de servicio). Este servicio se sincroniza con un Servidor y si viene un nuevo pedido, crea una notificación.

Hasta ahora, todo funciona bien, tengo la notificación y el mensaje de Toast. Sin embargo, me gustaría tener un diálogo que notifique al usuario sobre el nuevo pedido.

Según entendí, puede iniciar una actividad desde dentro del servicio, que muestra el diálogo. Esto funciona, pero la actividad comienza en la parte superior de la stack de actividades actual y muestra el cuadro de diálogo. Tengo una actividad sin vista adjunta y muestra correctamente el cuadro de diálogo, sin embargo, sobre un fondo negro.

Lo que quiero es mostrar el diálogo sobre la actividad actual, causando que el fondo real (la actividad en ejecución) se desvanezca y muestre el diálogo.

¿Es esto de alguna manera posible?

Gracias, Filip

Recomiendo encarecidamente que NO HAGA esto (va en contra del diseño de Android y las pautas de UI). Las notificaciones son la forma preferida de lograr lo que estás haciendo (lo que parece que ya has logrado).

Dicho esto, si debe hacerlo, le recomendaría simplemente usar una actividad temática de Diálogo. De esta forma no tienes que iniciar un diálogo por separado. Consulte http://developer.android.com/guide/topics/ui/themes.html#ApplyATheme para saber cómo hacer esto.

Podemos mostrar el diálogo desde el servicio solo si se trata de un diálogo de alerta del sistema. Por lo tanto, configure el parámetro de diseño de ventana TYPE_SYSTEM_ALERT en Diálogo de la siguiente manera:

 dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); 

Pero necesita el permiso SYSTEM_ALERT_WINDOW. Por lo tanto, no olvide agregar este permiso en el archivo Manifiesto.

  

puede comenzar aprendiendo cómo crear una actividad que se parece a un diálogo (sin barra de título, fondo transparente, efecto “flotante”, etc.) y no, no puede simplemente iniciar un diálogo sin una actividad.

No puedes mostrar un dialogo Pero puede ir por el camino alternativo inflando su vista personalizada para que pueda mostrar un cuadro de diálogo en la pantalla cuando se cumplan ciertas condiciones.

No, no puedes secuestrar una actividad que no es “tuya” y ordenarle que muestre el diálogo. Su enfoque de comenzar su propia actividad es el clásico.