2011-09-22 21 views
6

Ya hice una pregunta similar, pero sin mucha suerte.¿Iniciar una vista desde un servicio?

Supongamos que tengo un servicio y necesito una vista para mostrarlo arriba. Al mismo tiempo, ambos deberían ser intratables, es decir, el usuario debería poder hacer clic en los botones dentro de la vista, así como en los que están en el servicio en segundo plano.

enter image description here

Es esto posible en teoría? En caso afirmativo, ¿cómo debo inicializar esa vista?

Gracias!

+1

que no entiendo: mostrar una vista por encima de servicio? Los servicios generalmente son invisibles en Android (no tienen UI). Tal vez necesites algún tipo de funcionalidad Toast personalizable. Intenta editar tu publicación y proporciona más detalles ... – pkk

Respuesta

1

Los servicios se ejecutan en segundo plano y no tienen una IU. Entonces no puedes mostrar algo con un Servicio.

Si necesita un Servicio para notificar al usuario sobre algo, entonces use Notification.

Ayou podría usar un Toast, pero desaconsejo, ya que puede confundir a los usuarios, ya que puede aparecer sobre la actividad de otra aplicación.

+0

¿Qué tal si agregas una vista a WindowManager? ¿Eso no refuta su primera declaración? – JacksOnF1re

2

Supongo que está haciendo un uso indebido de la palabra "Servicio". El servicio es invisible, las actividades son visibles.

¡No hay botones en un servicio!

¡Así que no tienes otra opción! Debería poner ambas vistas en una Actividad, y usaría una RelativeLayout y establecería la visibilidad de sus hijos en GONE/Visible.

http://developer.android.com/reference/android/widget/RelativeLayout.html

También usando una ventana emergente y hacer la disposición en virtud de que se puede hacer clic perturbará el usuario. Estás cambiando completamente la experiencia del usuario. También sugiero que su ventana emergente aparezca en la parte superior/inferior de su diseño inicial

+1

Creo que esta es su mejor apuesta si es absolutamente necesario para lograr este efecto. Hazte un Diseño contenido dentro de tu diseño principal de Actividades que parezca una ventana emergente y hazlo visible cuando lo desees. Aparte de esto, no hay forma de hacer clic en los botones de primer plano y fondo. – FoamyGuy

1

Lo que desea es una actividad en lugar de un servicio y un cuadro de diálogo en lugar de ver. Le sugiero que lea este documento en google: http://developer.android.com/guide/topics/fundamentals.html

Sin embargo, para responder a su pregunta acerca de que ambos sean interactivos. Esto no es posible En cualquier momento dado 1 y solo 1 actividad está en la parte superior de la pila de actividades. El usuario solo puede interactuar con esa actividad. Si quieres algo así como una ventana flotante, entonces tendrás que crearlo tú mismo. Aunque tenga en cuenta que va en contra de los principios de diseño de Android.

4

Lo que quiere es agregar una vista desde su instancia de servicio en ejecución. De esta forma, puede persistir en la vista de todas las actividades y desde cualquier otro lugar. Ver este gran ejemplo:

http://www.piwai.info/chatheads-basics/

+0

+ upvote para el enlace y ¡respóndalo solo! – NitZRobotKoder

5

Sí, es posible, lo que hay que hacer es llamar al servicio de WindowManager y poner su punto de vista a través de la misma.

WindowManager windowManager=(WindowManager)getSystemService(WINDOW_SERVICE); 
LayoutInflater inflater=(LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE); 
RelativeLayout layout=(RelativeLayout) inflater.inflate(R.layout.box,null); 

Se necesita un objeto WindowManager.LayoutParams que debe contener los parámetros para el diseño

windowManager.addView(layout,params); 

Pues bien, añade la vista

Cuestiones relacionadas