¿Cómo iniciar una actividad desde un servicio?

¿Es posible iniciar una actividad desde un servicio? Si es así, ¿cómo podemos lograr esto?

android.app.Service es descendiente de android.app.Context para que pueda usar startActivity directamente. Sin embargo, como comienza esto fuera de cualquier actividad, necesita establecer el indicador FLAG_ACTIVITY_NEW_TASK en el bash.

Por ejemplo:

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

donde this es tu servicio

Incluso si el marco te permite iniciar una actividad desde un servicio, probablemente no sea una solución adecuada. El motivo es que la tarea Servicio puede o no ser el objective 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 usar 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.

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

Esto seguramente resolverá tu 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);