programacion - manual android studio avanzado
¿Cuál es la forma correcta de detener un servicio que se ejecuta como primer plano? (2)
Desde su actividad, llame a startService(intent)
y pásele algunos datos que representarán una clave para detener el servicio .
Desde su servicio, llame a stopForeground(true)
y luego a stopSelf()
justo después.
Estoy intentando detener un servicio que se ejecuta como servicio de primer plano.
El problema actual es que cuando llamo a stopService()
la notificación aún permanece.
Así que en mi solución he agregado un receptor que estoy registrando dentro de onCreate()
Dentro del método onReceive()
, llamo stopforeground(true)
y oculta la notificación. Y luego se stopself()
para detener el servicio.
Dentro de onDestroy()
el receptor.
¿Hay una manera más adecuada de manejar esto? porque stopService () simplemente no funciona.
@Override
public void onDestroy(){
unregisterReceiver(receiver);
super.onDestroy();
}
para iniciar y detener un servicio en primer plano desde una actividad, use:
//start
Intent startIntent = new Intent(MainActivity.this, ForegroundService.class);
startIntent.setAction(Constants.ACTION.STARTFOREGROUND_ACTION);
startService(startIntent);
//stop
Intent stopIntent = new Intent(MainActivity.this, ForegroundService.class);
stopIntent.setAction(Constants.ACTION.STOPFOREGROUND_ACTION);
startService(stopIntent);
en su servicio de primer plano - use (al menos) este código:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (intent.getAction().equals(Constants.ACTION.STARTFOREGROUND_ACTION)) {
Log.i(LOG_TAG, "Received Start Foreground Intent ");
// your start service code
}
else if (intent.getAction().equals( Constants.ACTION.STOPFOREGROUND_ACTION)) {
Log.i(LOG_TAG, "Received Stop Foreground Intent");
//your end servce code
stopForeground(true);
stopSelf();
}
return START_STICKY;
}