Bienvenidos sean a este post, hoy hablaremos sobre la barra de estado la cual esta ubicada en la parte superior de la pantalla, donde la parte izquierda esta reservada para mostrar las notificaciones por medio de un icono, nosotros podemos arrastrar la barra de notificaciones hacia abajo para ver las notificaciones de forma que se puedan leer.

Anuncios

Las notificaciones pueden ser creadas por un servicio o una actividad, la ventaja de este tipo de notificacion es que puede ser creada en segundo plano sin interferir con la que este usando el usuario. Para ver nuestro primer ejemplo utilizaremos a ServiciosMusica que creamos en este post, sino lo tienes te recomiendo crearlo, donde haremos las siguientes modificaciones.

Primero agregaremos la siguiente linea en la clase ServicioMusica:

private static final int ID_NOTIFICACION_CREAR = 1;

Para crear nuestra notificacion agregaremos el siguiente bloque al principio del metodo onStartCommand():

NotificationCompat.Builder notific = new NotificationCompat.Builder(this)
        .setContentTitle("Creando servicio de musica")
        .setSmallIcon(R.mipmap.ic_launcher)
        .setContentText("informacion adicional");
NotificationManager notificationManager = (NotificationManager)
        getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(ID_NOTIFICACION_CREAR, notific.build());

Primero crearemos un objeto llamado notific donde construiremos por medio de NotificationCompat.Builder y setearemos algunos detalles, como primero el titulo, luego el tipo de icono y por ultimo agregaremos un texto para mostrar en la notificacion, luego crearemos un administrador de notificacion para asociarlo al servicio de notificacion (NOTIFICATION_SERVICE) y luego crearemos la notificacion, todo esto sucedera cada vez que sea creado el servicio, si lo probamos veremos esta notificacion

Aca pueden ver como aparece el icono junto al de advertencia despues de iniciado el servicio
Esto veremos cuando bajamos las notificaciones.
Anuncios

A continuacion veremos algunas practicas que se pueden realizar con las notificaciones, nuestra modificacion sera la posibilidad de lanzar una actividad desde la notificacion, para ello debemos agregar el siguiente bloque despues las modificaciones agregadas anteriormente:

PendingIntent intencionPendiente = PendingIntent.getActivity(this,0,
        new Intent(this, MainActivity.class),0);
notific.setContentIntent(intencionPendiente);

Con este codigo asociaremos una actividad que se ejecutara cuando el usuario pulse sobre la notificacion, por medio de PendingIntent y a traves de getActivity le asignaremos una nueva actividad y en la siguiente linea lo llamaremos, ahora veamos otro ejemplo en este caso la eliminacion de la notificacion porque si lo probaron hasta ahora despues de creada la notificacion cuando detenemos el servicio la notificacion sigue en la barra, para eliminar la misma debemos hacer la siguiente modificacion en el metodo onDestroy():

NotificationManager notificationManager = (NotificationManager)
        getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancel(ID_NOTIFICACION_CREAR);

Con este bloque setearemos el servicio por medio getSystemService() al cual setearemos el servicio de notificacion y luego por medio de cancel() enviaremos el identificador del mismo, esto procedera a eliminar el mensaje en la barra, pasemos a la ultima modificacion en este caso agregaremos una mejor customizacion de nuestro para ello volveremos al primer bloque que creamos y agregaremos las siguientes lineas:

              .setLargeIcon(BitmapFactory.decodeResource(getResources()
                        ,android.R.drawable.ic_media_play))
                .setWhen(System.currentTimeMillis() + 1000 * 60 * 60)
                .setContentInfo("mas info")
                .setTicker("Texto en la barra de Estado")

En la primer linea modificaremos el icono que se mostrara cuando bajemos la barra de notificaciones, nuestro siguiente modificacion nos mostrara el tiempo cuando fue llamada la notificacion, en el siguiente mostrara mas informacion adicional por debajo de el tiempo que asignamos antes y la ultima modificacion mostrara un mensaje en el contenido de la notificacion, nuestro bloque nuevo quedara de la siguiente forma:

        NotificationCompat.Builder notific = new NotificationCompat.Builder(this)
                .setContentTitle("Creando servicio de musica")
                .setSmallIcon(R.mipmap.ic_launcher)
                .setLargeIcon(BitmapFactory.decodeResource(getResources()
                        ,android.R.drawable.ic_media_play))
                .setWhen(System.currentTimeMillis() + 1000 * 60 * 60)
                .setContentInfo("mas info")
                .setTicker("Texto en la barra de Estado")
                .setContentText("informacion adicional");
Anuncios

Si lo probamos nos quedara de esta forma:

Veamos como quedo finalmente nuestro codigo de la clase ServicioMusica:

package org.example.serviciosmsica;

import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.media.MediaPlayer;
import android.os.IBinder;
import android.support.v4.app.NotificationCompat;
import android.widget.Toast;

public class ServicioMusica extends Service {

    private static final int ID_NOTIFICACION_CREAR = 1;
    MediaPlayer reproductor;

    @Override
    public void onCreate(){
        Toast.makeText(this,"Servicio creado",
                Toast.LENGTH_SHORT).show();
        reproductor = MediaPlayer.create(this,R.raw.audio);
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int idArranque){
        NotificationCompat.Builder notific = new NotificationCompat.Builder(this)
                .setContentTitle("Creando servicio de musica")
                .setSmallIcon(R.mipmap.ic_launcher)
                .setLargeIcon(BitmapFactory.decodeResource(getResources()
                        ,android.R.drawable.ic_media_play))
                .setWhen(System.currentTimeMillis() + 1000 * 60 * 60)
                .setContentInfo("mas info")
                .setTicker("Texto en la barra de Estado")
                .setContentText("informacion adicional");
        NotificationManager notificationManager = (NotificationManager)
                getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(ID_NOTIFICACION_CREAR, notific.build());
        PendingIntent intencionPendiente = PendingIntent.getActivity(this,0,
                new Intent(this, MainActivity.class),0 );
        notific.setContentIntent(intencionPendiente);
        Toast.makeText(this,"Servicio iniciado",
                Toast.LENGTH_SHORT).show();
        reproductor.start();
        return START_STICKY;
    }

    @Override
    public void onDestroy(){
        Toast.makeText(this,"Servicio Detenido",
                Toast.LENGTH_SHORT).show();
        reproductor.stop();
        NotificationManager notificationManager = (NotificationManager)
                getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.cancel(ID_NOTIFICACION_CREAR);
    }

    @Override
    public IBinder onBind(Intent intencion){
        return null;
    }
}
Anuncios

Probemos nuestra app, como se ve en el siguiente video

Como ven en el video, se pueden visualizar todas las modificaciones realizadas en nuestro codigo, especialmente la eliminacion de la notificacion cuando se detiene el servicio y el mejor contenido de la notificacion.

Anuncios

En resumen, hoy hemos aprendido que es y como utilizar la notificacion de la barra de estado, hemos visto como agregar nuevas funciones a ella, espero les haya sido util sigueme en Twitter, Facebook o Google+ para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.50

Anuncio publicitario