2010-08-11 26 views

Respuesta

67

android.app.Service es descendiente de android.app.Context por lo que puede usar startActivity directamente. Sin embargo, como comienza esto fuera de cualquier actividad, debe establecer el indicador FLAG_ACTIVITY_NEW_TASK en el intento.

Por ejemplo:

Intent i = new Intent(); 
i.setClass(this, MyActivity.class); 
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(i); 

donde this es su servicio.

+1

Esto es bueno, pero cada vez que Activiyt comience como una nueva actividad iniciada. Y este tipo de llamada funciona solo una vez. ¿O extraño algo? – uzay95

+0

@MarcinGil ¿sabes si esto es un comportamiento intencional? En otras palabras, ¿sabes si los ingenieros de Google diseñaron servicios para poder abrir una actividad sin la interacción del usuario y si el proceso siempre es fluido? – MikeIsrael

+0

@MikeIsrael Creo que es. Solo imagine que el servicio del sistema que se ejecuta en segundo plano no puede mostrar la actividad de aceptar/rechazar en la llamada entrante. Como usted es el desarrollador del servicio y sabe qué actividad desea mostrar, todo depende de usted. Puede usar servicios iniciados desde su aplicación para realizar algunas operaciones y, por ejemplo. activar la aplicación en ciertos factores desencadenantes; como el estado de la actualización en la barra de notificaciones y la aplicación de inicio con un clic. –

7

Tuve un problema al iniciar una actividad de un servicio, fue debido a la bandera de intento FLAG_ACTIVITY_NEW_TASK faltante.

+0

No sé pero puedo iniciar Actividad directamente desde el Servicio sin ninguna marca y está funcionando bien –

7

Esto sin duda va a resolver su problema

Intent intent = new Intent(); 
intent.setAction(Intent.ACTION_MAIN); 
intent.addCategory(Intent.CATEGORY_LAUNCHER); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
ComponentName cn = new ComponentName(this, TaxiPlexer.class); 
intent.setComponent(cn); 
startActivity(intent); 
+0

Hola Tengo un Problema de iniciar actividad cuando la aplicación está cerca del servicio (FCM) El código anterior funciona solo cuando la aplicación ya está abierta. Por favor, ayúdenme para que esto abra la aplicación desde el fondo ejecutando el servicio –

18

Incluso si el marco le permite iniciar una actividad de un servicio, que probablemente no es una solución adecuada. El motivo es que la tarea Servicio puede o no ser el objetivo del usuario en el momento en que el Servicio desea interactuar con el usuario. Interrumpir lo que el usuario está haciendo actualmente se considera una mala forma de diseño, especialmente de algo que se supone que funciona en segundo plano.

Por lo tanto, debe considerar el uso de un Servicio de Notificación con Notificación, que tiene un PendingIntent para iniciar la Actividad deseada cuando el usuario decida que es hora de investigar. Piense en ello como gratificación retrasada.

Cuestiones relacionadas