Como crear un servicio (background) en Android con ejemplo

Hola a tod@S hoy veremos un tutorial interesante sobre servicios a lo largo de este tutorial tratare de hacerlo muy ameno y muy bien explicado para que todos puedan entenderlo de forma rápida.
 Han visto ustedes esas hermosas aplicaciones como por ejemplo la que me gusta mucho, Soundcloud, para los que no saben es una aplicación de música libre algo así como un stream. Pero tu puedes cerrar la aplicación y hacer otras cosas y esta aplicación seguirá emitiendo música de forma interrumpida, entonces haremos un ejercicio con esa misma funcionalidad explicada anteriormente.

Como crear un servicio (background) en Android con ejemplo

 

 

Que es un Servicio en Android?

Un servicio es un componente android que ejecuta instrucciones en segundo plano. Este se representa en Java con la clase Service.

Esto significa que si el usuario cambia hacia otra aplicación, el servicio seguirá activo hasta que cumpla su objetivo o sea terminado por el sistema, debido a la falta de recursos.

Para poder hacer que funcione de forma correcta necesitamos crear una nueva clase extensiada por la clase Service

public class ServicioCorreo extends Service {

Dependiendo del tipo de servicio,  se usan los controladores necesarios de la clase Service. Veamos algunos de los métodos que controlan el flujo:

onCreate(): Se ejecuta cuando el servicio está creado en memoria. Si el servicio ya está activo, entonces se evita de nuevo su llamada.
onStartCommand():Método que ejecuta las instrucciones del servicio. Se llama solo si el servicio se inició con startService() vieron la imagen al principio donde veíamos los iconos en segundo plano bueno aquí se hace esa magia y al final en el ejemplo practico les enseñare hacer eso, que seguro en ninguna otra pagina les enseñaran muajajajaja

onBind(): Solo se ejecuta si el servicio fue ligado con bindService() por un componente. Retorna una interfaz Java de comunicación del tipo IBinder. Este método siempre debe llamarse, incluso dentro de los started services, los cuales retornan null.
onDestroy(): Se llama cuando el servicio está siendo destruido. Importantísimo que dentro de este método detengas los hilos iniciados.

Aunque se que eres don vergas y doña vergas y no te gusta leer te dejo un link para que te empapes mas sobre el tema–> Service

También algo importante que no debes olvidar, cuando usamos la clase extanciada por Service debemos siempre llamarlo desde nuestro AndroidManifest.

<service android:name=".ServicioMusica" />

Empezamos con el ejercicio practico pues. aaaaaawiiiiiiiiiiiiiii

Reproductor de música utilizando la clase Service

Empezamos creando una interfaces con dos botones y debe quedar de la siguiente forma:

Si desean las imágenes de los botones pasen por aquí:
como crear una radio online android studio

Yaya se que ustedes son don vergas y doña vergas así que les dejo armado el activity_main

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
tools:context=“com.androfast.pc.appreprodctorsegundoplano.MainActivity”>

<Button
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:id=“@+id/btnStop”
android:background=“@drawable/stop”
android:layout_gravity=“right”
tools:layout_editor_absoluteY=“117dp”
tools:layout_editor_absoluteX=“28dp”
android:layout_alignParentTop=“true”
android:layout_alignParentRight=“true”
android:layout_alignParentEnd=“true”
android:layout_marginRight=“11dp”
android:layout_marginEnd=“11dp”
android:layout_marginTop=“126dp” />

<Button
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:id=“@+id/btnStart”
android:background=“@drawable/play”
android:layout_gravity=“left”
tools:layout_editor_absoluteY=“117dp”
tools:layout_editor_absoluteX=“209dp”
android:layout_alignBaseline=“@+id/btnStop”
android:layout_alignBottom=“@+id/btnStop”
android:layout_alignParentLeft=“true”
android:layout_alignParentStart=“true” />

<TextView
android:id=“@+id/textView”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:layout_alignEnd=“@+id/btnStop”
android:layout_alignParentLeft=“true”
android:layout_alignParentStart=“true”
android:layout_alignParentTop=“true”
android:layout_alignRight=“@+id/btnStop”
android:layout_marginTop=“34dp”
android:text=“Reproductor de musica en Segundo plano”
android:textDirection=“firstStrong”
android:textSize=“30dp”
android:textAlignment=“center”/>
</RelativeLayout>

Ahora empezaremos con dos clases nuestro MainActivity y nuestra clase ServicioMusica la cual estará extensiada por la clase Service.

 

 

Empezamos con la clase ServicioMusica

import android.app.Notification;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.media.MediaPlayer;
import android.os.Build;
import android.os.IBinder;
import android.support.annotation.RequiresApi;
import android.support.v4.content.ContextCompat;
import android.widget.Toast;
/**
* Created by AndroFast on 18/11/2017.
*/

public class ServicioMusica extends Service implements MediaPlayer.OnPreparedListener {
MediaPlayer reproductorM;
String msg = “¡PRECAUCIÓN! Si se mantiene abierto, puede consumir mucha batería”;
int FORE_ID = 1335;
@Override
public void onCreate() {
   Toast.makeText(this,“Servicio creado”,
   Toast.LENGTH_SHORT).show();
    reproductorM = MediaPlayer.create(this, R.raw.audio);
}

// @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
@Override
public int onStartCommand(Intent intenc, int flags, int idArranque) {
// public int onStartCommand(Intent intent, int flags, int startId) {
Intent noty_intent = new Intent(this,
MainActivity.class);
noty_intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_CLEAR_TASK);
PendingIntent pIntent = PendingIntent.getActivity(this, 0, noty_intent,
0);
Notification n = null;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        n = new Notification.Builder(this)
           .setContentTitle(“HEYEAYEAHEYEAYEA…”)
           .setContentText(msg).setSmallIcon(R.mipmap.ic_launcher)
           .setColor(ContextCompat.getColor(getBaseContext(), R.color.green))
           .setLargeIcon(BitmapFactory.decodeResource(getBaseContext().getResources(),
           R.mipmap.ic_launcher))
           .setContentIntent(pIntent).setAutoCancel(true).setOngoing(true)
           .build();
  }
}
   startForeground(FORE_ID, n);
   reproductorM.start();
    Toast.makeText(this,“Servicio iniciado “+ idArranque,
    Toast.LENGTH_SHORT).show();
  return START_STICKY;
 }
@Override
  public void onDestroy() {
    Toast.makeText(this,“Servicio detenido”,
    Toast.LENGTH_SHORT).show();
     reproductorM.stop();
}

@Override
     public IBinder onBind(Intent intencion) {
    return null;
 }
     public void onPrepared(MediaPlayer reproductor) {
    reproductor.start();
  }
}

 

Recuerdan que al principio les dije que les enseñaría como hacer que aparezca como un servicio nuestra aplicación en background o segundo plano osea así como la siguiente foto:

Revisando Código

Dentro de nuestra clase ServicioMusica  debemos fijarnos en el metodo onStartCommand les comento que siempre habrá dicho método, ya explicamos lineas arriba para que sirve bueno ahí es donde llamaremos al icono que queremos que aparezca el titulo y demás cosas necesarias así como se muestra abajo en las siguientes lineas:

.setContentTitle 
.setContentText 
.setColor 
.setLargeIcon 
.setContentIntent

Ahora cogemos este trozo de código y vemos que traemos al icono de la aplicación y podremos mostrarla.

.setContentText(msg).setSmallIcon(R.mipmap.ic_launcher)

Pero si tenemos al mismo icono se vera feo por eso les dejare el que estoy usando en esta aplicación, para ello primero ustedes deben cambiarle de icono a su aplicación si no recuerda como sigan el siguiente enlace:
como cambiar el icono de una aplicacion en android studio

 

Bien ahora debemos seguir con el MainActivity aqui solo instanciamos nuestro botones y llamamos a nuestros métodos startservice stopservice con unos Intent desde la clase ServicioMusica

import android.app.Activity;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageButton;
public class MainActivity extends Activity {

Button iniciar;
Button detener;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

iniciar = (Button) findViewById(R.id.btnStart);
iniciar.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
startService(new Intent(MainActivity.this,
ServicioMusica.class));
}
});
detener = (Button) findViewById(R.id.btnStop);
detener.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
stopService(new Intent(MainActivity.this,
ServicioMusica.class));
}
});
 }
}

 

Aun no terminamos debemos ir a nuestro AndroidManifest y debemos llamar a nuestra clase ServicioMusica agrenadola dentro de aplication como les muestro en rojo a continuación:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.androfast.pc.appreprodctorsegundoplano">
    <uses-permission android:name="android.permission.WAKE_LOCK" />
<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <service android:name=".ServicioMusica" />
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

 

Bueno con eso hemos culminado
Igual si piensas que hablo escribo en chino te dejo el ejercicio:

  Link de la descarga
Programador alfa, lomo plateado, barba de clavos, mentón de roca, no descarga la aplicación sigue el tutorial. Clic para DESCARGAR
ENLACES DE INTERÉS:

2 comentarios en «Como crear un servicio (background) en Android con ejemplo»

  1. mariano

    hola como andas quiero profundisar mucho en android studio me encuentro que el año que viene voy a terminar cursado de tecnico pero en programacion soy un queso y practicamente aprendo sobre la marcha me cuesta una banda ir programando seria genial si me pudieras ir dando una mano

    1. ANDROFAST Autor

      Hola Mariano, tienes varias opciones. La primera es leer aquí en nuestra pagina web, la segunda opción es agregarte al grupo de whassap e ir preguntado sobre tus dudas, la tercera es recibir clases por mi persona. Las dos primeras son gratis, la tercera es remunerada, saludos.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

WhatsApp chat