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:
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 y 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:
Hola soy Alex Céspedes fundador de ANDROFAST, programo algunas cosas por diversión, me gusta aprender cosas nuevas y estoy pendiente de todo lo que tenga que ver con tecnología. Este blog lo cree para todas las personas que tengan dificultades en la programación, para ser sincero nunca fui bueno y reprobé algunos cursos de programación, pero mis ganas de aprender pudieron más. SI YO PUEDO TU PUEDES ANIMO!
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
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.