Iniciar actividad desde el servicio en Android

4 minutos de lectura

Iniciar actividad desde el servicio en Android
d-hombre

Androide:

public class LocationService extends Service {

    @Override
    public void onStart(Intent intent, int startId) {
        super.onStart(intent, startId);
        startActivity(new Intent(this, activity.class));
    }
}

Lancé este servicio desde Activity

En Activity si la condición satisface iniciar

startService(new Intent(WozzonActivity.this, LocationService.class));

de mi LocationService mencionado anteriormente no pudo iniciar Activity¿cómo puedo obtener el contexto de la ejecución actual? Activity en clase de servicio?

Iniciar actividad desde el servicio en Android
d-hombre

Desde dentro de la clase de servicio:

Intent dialogIntent = new Intent(this, MyActivity.class);
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(dialogIntent);

  • Solo se necesita FLAG_ACTIVITY_NEW_TASK ya que solo las actividades pueden iniciar actividades sin él. ‘esto’ se puede usar en lugar de getBaseContext y getApplication ya que el servicio tiene su propio contexto.

    – Sojurar

    26 de diciembre de 2013 a las 14:37

  • ¿Cómo eliminar programáticamente esa actividad de la lista de pantallas recientes?

    – Prashanth Debbadwar

    2 de noviembre de 2015 a las 10:41


  • No funciona si el servicio está en segundo plano. ¿Alguna solución para esto?

    –Rick Royd Aban

    21 de julio de 2016 a las 9:28

  • Por favor, ayúdenme a abrir la aplicación desde el servicio en segundo plano. He usado el servicio Firebase (FCM). Quiero abrir la pantalla de la interfaz de usuario de Mis llamadas desde Mi aplicación. Así que, por favor, ayúdenme con eso.

    – Dipanki Jadav

    20 oct 2016 a las 9:31

  • He escrito su código dentro de mi servicio cuando la aplicación está en segundo plano, y veo que el servicio funcionó en xiaomi mi a2, pero no funciona en xiaomi redmi note 7, ¿pueden ayudarme por qué funciona un dispositivo y otro no?

    –Amjad Omari

    27 de marzo de 2020 a las 17:54

1646971387 565 Iniciar actividad desde el servicio en Android
Andy

Tuve el mismo problema y quiero que sepas que nada de lo anterior funcionó para mí. Lo que funcionó para mí fue:

 Intent dialogIntent = new Intent(this, myActivity.class);
 dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 this.startActivity(dialogIntent);

y en una de mis subclases, almacenada en un archivo separado, tuve que:

public static Service myService;

myService = this;

new SubService(myService);

Intent dialogIntent = new Intent(myService, myActivity.class);
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
myService.startActivity(dialogIntent);

Todas las otras respuestas me dieron un nullpointerexception.

  • está almacenando el Servicio en un campo estático, lo que podría provocar una pérdida de memoria

    – Murmel

    15 de octubre de 2016 a las 8:28

  • startActivity es lo mismo this.startActivity! crea una instancia inútil de su servicio con startActivity normal igual, ¿por qué?

    – Amir Hossein Ghasemi

    25 de mayo de 2017 a las 12:29

1646971387 257 Iniciar actividad desde el servicio en Android
jose braz

ACTUALIZAR ANDROID 10 Y SUPERIOR

Ya no se permite iniciar una actividad desde el servicio (en primer plano o en segundo plano).

Todavía hay algunas restricciones que se pueden ver en la documentación.

https://developer.android.com/guide/components/activities/background-starts

  • @RahulBhobe Encontré esta respuesta útil, porque al agregar el SYSTEM_ALERT_WINDOW (y habilitarlo en la configuración) resolvió mi problema en Android 10.

    – Daniel F.

    5 de septiembre de 2020 a las 7:32


  • SYSTEM_ALERT_WINDOW no se puede otorgar en dispositivos Go Edition.

    – Shrdi

    29 de marzo de 2021 a las 11:25

  • @Shrdi, entonces, ¿tiene alguna solución para AndroidGo?

    – AlexS

    12 de agosto de 2021 a las 16:45

  • @AlexS No creo que esto funcione en Android 10+Go porque esta es la limitación del sistema. Cualquier característica sobre esto debería ofrecer otra forma o sugerencia alternativa, es posible que el usuario tampoco esté de acuerdo con este permiso.

    – Shrdi

    14 de agosto de 2021 a las 4:30

Otra cosa que vale la pena mencionar: si bien la respuesta anterior funciona bien cuando nuestra tarea está en segundo plano, la única forma en que podría hacer que funcione si nuestra tarea (hecha de servicio + algunas actividades) estuviera en primer plano (es decir, una de nuestras actividades visible al usuario) era así:

    Intent intent = new Intent(storedActivity, MyActivity.class);
    intent.setAction(Intent.ACTION_VIEW);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
    storedActivity.startActivity(intent);

No sé si ACTION_VIEW o FLAG_ACTIVITY_NEW_TASK tienen algún uso real aquí. La clave del éxito fue

storedActivity.startActivity(intent);

y por supuesto FLAG_ACTIVITY_REORDER_TO_FRONT por no volver a instanciar la actividad. ¡La mejor de las suertes!

uno no puede usar el Context de El Service; fue capaz de obtener el (paquete) Context similar:

Intent intent = new Intent(getApplicationContext(), SomeActivity.class);

  • Creo que esto funciona solo con FLAG_ACTIVITY_NEW_TASK bandera

    – Cerlín

    29 de octubre de 2019 a las 5:22

Iniciar actividad desde el servicio en Android
Jaime

Alternativamente,

Puede usar su propia clase de aplicación y llamar desde donde lo necesite (especialmente sin actividades).

public class App extends Application {

    protected static Context context = null;

    @Override
    public void onCreate() {
        super.onCreate();
        context = getApplicationContext();
    }

    public static Context getContext() {
        return context;
    }

}

Y registre su clase de aplicación:

<application android:name="yourpackage.App" ...

Luego llame :

App.getContext();

  • Creo que esto funciona solo con FLAG_ACTIVITY_NEW_TASK bandera

    – Cerlín

    29 de octubre de 2019 a las 5:22

1646971389 560 Iniciar actividad desde el servicio en Android
Suraj Gaur

También puedes usar getApplicationContext() método en su Servicio para ejecutar el Iniciar actividad() método como se escribe a continuación:

Intent myIntent = new Intent();
myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getApplicationContext().startActivity(myIntent);

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad