Inicio Android Notificaciones en Android (II): Barra de Estado

Notificaciones en Android (II): Barra de Estado

por sgoliver

Hace algún tiempo, ya tratamos dentro de este curso un primer mecanismo de notificaciones disponibles en la plataforma Android: los llamados Toast. Como ya comentamos, este tipo de notificaciones, aunque resultan útiles y prácticas en muchas ocasiones, no deberíamos utilizarlas en situaciones en las que necesitemos asegurarnos la atención del usuario ya que no requiere de ninguna intervención por su parte, se muestran y desaparecen automáticamente de la pantalla.

En este nuevo artículo vamos a tratar otro tipo de notificaciones algo más persistentes, las notificaciones de la barra de estado de Android. Estas notificaciones son las que se muestran en nuestro dispositivo por ejemplo cuando recibimos un mensaje SMS, cuando tenemos actualizaciones disponibles, cuando tenemos el reproductor de música abierto en segundo plano, … Estas notificaciones constan de un icono y un texto mostrado en la barra de estado superior, y adicionalmente un mensaje algo más descriptivo y una marca de fecha/hora que podemos consultar desplegando la bandeja del sistema. A modo de ejemplo, cuando tenemos una llamada perdida en nuestro terminal, se nos muestra por un lado un icono en la barra de estado superior (más un texto que aparece durante unos segundos).

demo-mised-call

… y un mensaje con más información al desplegar la bandeja del sistema, donde en este caso concreto se nos informa del evento que se ha producido («Missed call«), el número de teléfono asociado, y la fecha/hora del evento. Además, al pulsar sobre la notificación se nos dirige automáticamente al historial de llamadas.

demo-mised-call-2

Pues bien, aprendamos a utilizar este tipo de notificaciones en nuestras aplicaciones. Vamos a construir para ello una aplicación de ejemplo, como siempre lo más sencilla posible para centrar la atención en lo realmente importante. En este caso, el ejemplo va a consistir en un único botón que genere una notificación de ejemplo en la barra de estado, con todos los elementos comentados y con la posibilidad de dirigirnos a la propia aplicación de ejemplo cuando se pulse sobre ella.

Para generar notificaciones en la barra de estado del sistema vamos a utilizar una clase incluida en la librería de compatibilidad android-support-v4.jar  que ya hemos utilizado en otras ocasiones y que debe estar incluida por defecto en vuestro proyecto si lo habéis creado con alguna versión reciente del plugin de Eclipse. Esto es así para asegurar la compatibilidad con versiones de Android antiguas, ya que las notificaciones son un elemento que han sufrido bastantes cambios en las versiones más recientes. La clase en cuestión se llama NotificationCompat.Builder y lo que tendremos que hacer será crear un nuevo objeto de este tipo pasándole el contexto de la aplicación y asignar todas las propiedades que queramos mediante sus métodos set().

En primer lugar estableceremos los iconos a mostrar mediante los métodos setSmallIcon() y setLargeIcon() que se corresponden con los iconos mostrados a la derecha y a la izquierda del contenido de la notificación en versiones recientes de Android. En versiones más antiguas tan sólo se mostrará el icono pequeño a la izquierda de la notificación. Además, el icono pequeño también se mostrará en la barra de estado superior.

A continuación estableceremos el título y el texto de la notificación, utilizando para ello los métodos setContentTitle() y setContentText().

Por último, estableceremos el ticker (texto que aparece por unos segundos en la barra de estado al generarse una nueva notificación) mediante setTicker() y el texto auxiliar (opcional) que aparecerá a la izquierda del icono pequeño de la notificación mediante setContentInfo().

La fecha/hora asociada a nuestra notificación se tomará automáticamente de la fecha/hora actual si no se establece nada, o bien puede utilizarse el método setWhen() para indicar otra marca de tiempo. Veamos cómo quedaría nuestro código por el momento:

NotificationCompat.Builder mBuilder =
	new NotificationCompat.Builder(MainActivity.this)
		.setSmallIcon(android.R.drawable.stat_sys_warning)
		.setLargeIcon((((BitmapDrawable)getResources()
			.getDrawable(R.drawable.ic_launcher)).getBitmap()))
		.setContentTitle("Mensaje de Alerta")
		.setContentText("Ejemplo de notificación.")
		.setContentInfo("4")
		.setTicker("Alerta!");

El segundo paso será establecer la actividad a la cual debemos dirigir al usuario automáticamente si éste pulsa sobre la notificación. Para ello debemos construir un objeto PendingIntent, que será el que contenga la información de la actividad asociada a la notificación y que será lanzado al pulsar sobre ella. Para ello definiremos en primer lugar un objeto Intent, indicando la clase de la actividad concreta a lanzar, que en nuestro caso será la propia actividad principal de ejemplo (MainActivity.class). Este intent lo utilizaremos para construir el PendingIntent final mediante el método PendingIntent.getActivity(). Por último asociaremos este objeto a la notificación mediante el método setContentIntent() del Builder. Veamos cómo quedaría esta última parte comentada:

Intent notIntent =
    new Intent(MainActivity.this, MainActivity.class);

PendingIntent contIntent =
    PendingIntent.getActivity(
        MainActivity.this, 0, notIntent, 0);

mBuilder.setContentIntent(contIntent);

Por último, una vez tenemos completamente configuradas las opciones de nuestra notificación podemos generarla llamando al método notify() del Notification Manager,al cual podemos acceder mediante una llamada a getSystemService() con la constante Context.NOTIFICATION_SERVICE. Por su parte al método notify() le pasaremos como parámetro un identificador único definido por nosotros que identifique nuestra notificación y el resultado del builder que hemos construido antes, que obtenemos llamando a su método build().

NotificationManager mNotificationManager =
    (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

mNotificationManager.notify(NOTIF_ALERTA_ID, mBuilder.build());

Ya estamos en disposición de probar nuestra aplicación de ejemplo. Para ello vamos a ejecutarla en el emulador de Android y pulsamos el botón que hemos implementado con todo el código anterior. Si todo va bien, debería aparecer en ese mismo momento nuestra notificación en la barra de estado, con el icono y texto definidos.

notificacion-ticker

Si ahora salimos de la aplicación y desplegamos la bandeja del sistema podremos verificar el resto de información de la notificación tal como muestra la siguiente imagen:

notificacion-completa

Por último, si pulsamos sobre la notificación se debería abrir de nuevo automáticamente la aplicación de ejemplo.

En definitiva, como podéis comprobar es bastante sencillo generar notificaciones en la barra de estado de Android desde nuestras aplicaciones. Os animo a utilizar este mecanismo para notificar determinados eventos al usuario de forma bastante visual e intuitiva.

Puedes consultar y/o descargar el código completo de los ejemplos desarrollados en este artículo accediendo a la página del curso en GitHub.

Curso de Programación Android en PDF

Este curso también está disponible en PDF. Descubre cómo conseguirlo…

¿Te ha sido de utilidad el Curso de Programación Android? ¿Quieres colaborar de forma económica con el proyecto? Puedes contribuir con cualquier cantidad, unos céntimos, unos euros, cualquier aportación será bienvenida. Además, si tu aportación es superior a una pequeña cantidad simbólica recibirás como agradecimiento un documento con la última versión del curso disponible en formato PDF. Sea como sea, muchas gracias por colaborar!

Más información:

También te puede interesar

25 comentarios

Desarrollo en Android | sgoliver.net blog 20/10/2011 - 16:51

[…] Notificaciones en Android (II): Barra de Estado [Nuevo!] […]

Responder
Eugenio 23/10/2011 - 21:37

Gracias por todos los tutoriales son de mucha utilidad y de gran valor para los que estamos empezando. Un gran trabajo muy ilustrativo y bien explicado.

saludos

Responder
Jajoo 27/10/2011 - 23:12

Muchas gracias por todo, el mejor no es aquel que posea mayor conocimiento sino aquel que además de poseerlo lo comparte. Gracias por esforzarte en las explicaciones.

Responder
Notificaciones en Android (III): Diálogos | sgoliver.net blog 05/11/2011 - 13:51

[…] a la hora de mostrar notificaciones a los usuarios de nuestra aplicaciones: los toast y las notificaciones de la barra de estado. En este último artículo sobre notificaciones vamos a comentar otro mecanismo que podemos […]

Responder
LectorRSS actualización 1.3.4 « jmtu 11/01/2012 - 19:48

[…] muy bien explicado tanto en el muy recorrido curso de android de sgoliver, concretamente en este capítulo. Como también en la web para desarrolladores de android, aquí. Y poco más puedo añadir a esto, […]

Responder
Ric 10/03/2012 - 16:37

Saludos amigo. Tengo un problema con la barra de estado de mi android 1.5 (recién adquirido). en algún momento entró un sms y lo borré sin ver la notificación. lo que produjo una suerte de bucle, ya que continuamente me informa que tengo un sms por leer, sin embargo, tal sms no existe, cuando le doy «ver», me lleva a un cuadro de respuesta cuya dirección es: mssmscovertions0. y siempre me mantiene la notificación en la barra de estado. Hay alguna forma de borrar esa notificación? Ya he vaciado el caché de la aplicación Mensajes y siempre vuelve esa notificación. Necesito un exorcismo o hay algún recodo en el software que borre ese tipo de bucle-notificación? Agradezco la respuesta que puedas darme.

Responder
Elver Florez 13/07/2012 - 15:06

Poco a poco he avanzado en mi aplicacion ya casi la termino, pero ahora tengo un problema con esta notificacion y es que sale error al presionarla para abrir de nuevo mi aplicacion. y el error es porque yo le estoy pasando unos datos con el Bundle. por favor colaborame con esto. he buscado durante varios dias y no he encontrado como solucionarlo. de verdad te agradezco que me des una mano.

Responder
Agustin 12/09/2012 - 19:01

Se puede agendar un notificación para que se dispare a cierta hora y fecha ? o sea quiero que se me dispare un notificacion pero en cierta fecha y hora.
Saludos!

Responder
Lugh 29/01/2013 - 18:39

Hola que tal te queria consultar estoy implementando un servico de gcm y una notificacion en la barra de estado para cuando llega un mensaje ahora bien.
Quiero hacer dos cosas.
1- cuando llega el mensaje desplejar aparte de la notificacion una pantalla.
2- en la notificaicon cuando hace click el usuario puedo de ahi llamar a otra pantalla y pasarle informacion

Muchas gracias.

Responder
Paloky 13/03/2013 - 8:31

Hola.
Muchas gracias por el tutorial. Es muy bueno.
Siguiendo este tutorial, tengo una consulta.

Existe alguna forma de poder capturar los eventos de la barra de estados.
Por ejemplo. Quiero que mi aplicación sepa cuando mi dispositivo recibe un «whatsup», o un «SMS» o cualquier otro tipo de notificación.

Gracias.

Responder
christian 10/04/2013 - 23:05

Hola, muy buen tutorial, soy nuevo programando en android,
me podrías ayudar como agregar un icono de notificación personalizado
como una imagen.
gracias.

Responder
carlos ortega 08/06/2013 - 2:11

hola amig@ yo tengo un problema que desde ayer la barra de estado no me aparece parece y el programa tampoco sera que se elimino la barra como ago para recuperarla porfavor ayuda

Responder
Ivan 09/01/2014 - 16:01

Salvador,

Te quiero felicitar por tu aporte al conocimiento, al emprendimiento, al desarrollo de las tecnologías. En estos días estoy desarrollando una aplicación para Android y sin darme cuenta, me he vuelto fans de tu sitio.

Tu aporte es muy profesional y serio. Te doy las gracias por la ayuda y la buena onda.

Gracias!

Responder
erick 26/05/2014 - 4:54

Hola como le hago para que al darle click a la notificacion desaparezca de la barra de notificaciones?

Responder
Greisy 28/05/2014 - 22:32

Quisiera saber como hago para que cuando me llegue un sms no se muestre en la notificacion pero que me suene el celular, porque cuando lo desactivo tampoco me suena y no me doy cuenta cuando me llegan.. espero respuestas muchas gracias, saludos

Responder
Carlos Martinez 24/11/2014 - 19:21

Hola, saludos… quisiera saber si conocen alguna manera de buscar notificaciones de días anteriores… le explico… necesito saber el día y la hora en que fue extraída la micro SD de mi android, obviamente eso genera una notificación… es esto posible ??? gracias…

Responder
Bender 01/02/2015 - 22:09

Bien, y la cuestión es, como indicar un fecha y hora en que se lance la notificación

Responder
Nennah 24/02/2015 - 14:06

Lo primero es darte las gracias por tan estupendo blog, tan claro, descriptivo, completo y de los pocos que se mantienen actualizados.

Para crear este tipo de notificaciones, comentas el uso de la clase NotificationCompat.Builder.
En mis ejemplos he usado NotificationManager (http://developer.android.com/reference/android/app/NotificationManager.html).

¿Cual de las dos es más reconmendable para la creación de notificaciones en la barra de estado?¿Hay alguna diferencia realmente importante a tener en cuenta?

Responder
Nennah 24/02/2015 - 14:14

En mi comentario anterior, me equivoqué al indicar NotificationManager, quería indicar que el objeto que creo es de tipo Notification (android.app).

Disculpa, saludos.

Responder
Pablo 16/06/2015 - 15:43

Muchas gracias! Genial blog :)

Responder
Cristopher 23/09/2015 - 18:59

Una pregunta, como hacer para que esa notificación no se elimine

Responder
antonio 22/06/2016 - 20:10

Saludos, disculpe si alguien me puede ayudar
me gustaria que la pulsar un Button se despliegue la barra de de Estado notificaciones. que reemplaza el gesto de realizar con el dedo de deslizar de arriba a abajo. He buscado el codigo y no lo pillo.

Les agradezco su ayuda de antemano

Responder
Francisco Gracia 24/03/2017 - 21:03

Hola.
Al presionar sobre la notificación, esta no se limpia, es decir, cuando se clickea continúa como notificación.
¿Alguna idea?

Responder
hugo 04/04/2017 - 16:31

hola gracia por estos tutoriales son de gran ayuda

Responder
LectorRSS actualización 1.3.4 – jmtu 16/03/2021 - 13:34

[…] muy bien explicado tanto en el muy recorrido curso de android de sgoliver, concretamente en este capítulo. Como también en la web para desarrolladores de android, aquí. Y poco más puedo añadir a esto, […]

Responder

Dejar un comentario

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información. Aceptar Más Información

Política de Privacidad y Cookies