En una aplicación que estoy haciendo, la cual espero poder presentar en el blog en breve, me encontré con un problema que llevó un tiempo solucionar. La aplicación terminaba inesperadamente al intentar lanzar una actividad desde un Servicio, concretamente el error era:


Calling startActivity from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag
***

Así que como es habitual busqué en stackoverflow y encontré la solución, el código que generaba el problema era el siguiente:



Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, name);
sendIntent.setType("text/plain");
sendIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(Intent.createChooser(sendIntent, "Compartir en");

La solución

Sin embargo, aún añadiendo el Flag FLAG_ACTIVITY_NEW_TASK el error persistia. El problema reside en que el método createChooser(), devuelve un nuevo intent, según la documentación, y por tanto el flag que acabamos de añadir no se copia automáticamente en el nuevo intent y es necesario volver a añadirlo.

Una posible solución es:

startActivity(Intent.createChooser(sendIntent, "Compartir en")
   .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));

De esta forma el error Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag deberá estar solucionado.

Referencias

Solución en Stackoverflow »» Visitar sitio

Índice