Como dejar un servicio funcionando en segundo plano en Android cerrando la aplicación que lo inicia

publicado por: Anonymous

Desde una aplicación para Android creo y ejecuto un servicio que corre en un hilo y se ejecuta en segundo plano, pero al cerrar por completo la aplicación principal también muere el servicio.

El hilo que creo lo declaro como Daemon pero aún así me “mata” el servicio.

Mi idea es dejar el servicio funcionando aunque cerremos la aplicación principal, un estilo wasap que cuando cierras el programa principal te siguen llegando los mensajes.

¿Alguna idea?

solución

Si deseas usar un servicio y este continué ejecutando el proceso aún destruyendo la aplicación, debes definir :

Service.START_STICKY : recrea el servicio si la aplicación se
destruye.

Puedes ver como ejemplo este servicio que reproduce un archivo de audio:

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
import android.util.Log;
import android.widget.Toast;


/* Add declaration of this service into the AndroidManifest.xml inside application tag*/

public class BackgroundSoundService extends Service {

    private static final String TAG = "BackgroundSoundService";
    MediaPlayer player;

    public IBinder onBind(Intent arg0) {
        Log.i(TAG, "onBind()" );
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        player = MediaPlayer.create(this, R.raw.jorgesys_song);
        player.setLooping(true); 
        player.setVolume(100,100);
        Toast.makeText(this, "Service started...", Toast.LENGTH_SHORT).show();
        Log.i(TAG, "onCreate() , service started...");

    }
    public int onStartCommand(Intent intent, int flags, int startId) {
        player.start();
        return Service.START_STICKY;
    }

    public IBinder onUnBind(Intent arg0) {
        Log.i(TAG, "onUnBind()");
        return null;
    }

    public void onStop() {
        Log.i(TAG, "onStop()");
    }
    public void onPause() {
        Log.i(TAG, "onPause()");
    }
    @Override
    public void onDestroy() {
        player.stop();
        player.release();
        Toast.makeText(this, "Service stopped...", Toast.LENGTH_SHORT).show();
        Log.i(TAG, "onCreate() , service stopped...");
    }

    @Override
    public void onLowMemory() {
        Log.i(TAG, "onLowMemory()");
    }
}

Puedes hacer uso también de un BroadcastReceiver

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *