Notificaciones Android - II. Uso de las notificaciones en la barra de estado

Hola de nuevo chic@s! En esta lección vamos a ver otra forma de mostrar mensajes al usuario, en este caso vamos a usar las notificaciones en la barra de estado!

Eclipse, Java, Android
Eclipse, Java, Android

Estas notificaciones son mensajes que se pueden mostrar al usuario fuera de la interfaz de usuario normal es decir, independientemente de donde estemos habitualmente se reserva y/o respeta este espacio, digo esto, porque nosotros como desarrolladores podremos decirle a nuestra aplicación si queremos usar este espacio también para nuestra aplicación, el caso es que hay aplicaciones como los juegos, que no suelen respetarlo (porque necesitan todo el espacio).

Lo que te quería decir después de este rollo es podremos arrastrar con nuestro dedito mágico esta barra hacia abajo y ver todas nuestras notificaciones ¿mola eh?

Desde el punto de vista del desarrollador, cuando le decimos al sistema que emita una notificación, el sistema primero mostrara un icono en el área de notificación, si quisiéremos ver los detalles de esta notificación, entonces tendríamos que abrir el buzón de notificaciones, esto como sabes, es arrastrando esta barra hacia abajo.

Este tipo de notificaciones al usuario, se usan sobre todo para informar al usuario de acciones o eventos que nuestra aplicación hace o recibe, un buen ejemplo seria su uso para informar al usuario desde un servicio que no tiene interface gráfica ¿aun no lo tienes claro? el típico ejemplo que te puedo decir es el del correo electrónico, una aplicación de correo electrónico "escucha" mediante un servicio cada cierto tiempo si tiene un mensaje nuevo en la bandeja de entrada, cuando recibimos un mensaje nuevo, la aplicación notificara al usuario mediante una notificación de este tipo, y cuando abrimos el buzón de notificaciones, veremos detalles de este correo como el asunto y remitente.

Desde la aparición de JB, estas notificaciones además pueden tener 2 estilos visuales, la de toda la vida la llamaremos Vista normal, y la que se introduce apartir de la versión 4.1 la llamaremos Vista extendida. Otra cosa importante que debes saber de las notificaciones es la permanencia de las notificaciones, es decir hay unas notificaciones que son fijas en el buzón de notificaciones y por lo tanto no podemos quitar (como por ejemplo la típica aplicación con el porcentaje de la batería) y otras notificaciones que si podremos quitar cuando las leamos (como por ejemplo cuando recibimos un whatsap). Esto lo conseguiremos pasándole un parámetro que veremos mas adelante.

Vista Normal de una notificación Android

Una notificación en la vista normal aparece o ocupa en un área de hasta 64 dp alto. Incluso si crea una notificación con un estilo de vista grande o extendida, aparecerá en la vista normal hasta que se expanda (se expandira automáticamente si es la primera en la lista). Veamos un ejemplo de una vista normal:

Las leyendas de la figura se refieren a lo siguiente:

Notificacion normal android

1.título de contenido
2.icono grande
3.texto de contenido
4.info contenido
5.Pequeño icono
6.El tiempo que se ha emitido. Puedes establecer un valor explícito del tiempo con setWhen(), y si no lo haces, el sistema indicara el tiempo por defecto con la recepción de la notificación.

 

Vista Extendida de una notificación Android

La vista extendida de una notificación aparece solamente cuando la notificación se expande, lo que sucede cuando la notificación se encuentra en la parte superior del buzón de notificaciones, o cuando el usuario expande la notificación con un gesto (desliza el dedo hacia abajo sobre la notificación que quieres expandir). Estas Notificaciones ampliadas están disponibles a partir de Android 4.1. La siguiente captura de pantalla muestra una notificación de tipo bandeja de entrada de una aplicación de correo electrónico:

Notificacion normal android

1.título de contenido
2.icono grande
3.texto de contenido
4.info contenido
5.Pequeño icono
6.El tiempo que se ha emitido. Puedes establecer un valor explícito del tiempo con setWhen(), y si no lo haces, el sistema indicara el tiempo por defecto con la recepción de la notificación.
7.Area de detalle de la notificación.

 

 

Ejemplo sencillo Notificación Android

Bueno, he visto la documentación oficial de Android, con sus ejemplos tan molones y... que quieres que te diga... lo fácil lo hacen complicado!! voy a poner el código que uso en mis aplicaciones, ya veras que es muy sencillo!! lo primero es definir la variables que van a intervenir en la notificación, como ves necesitaremos 2 objetos, uno de tipo NotificationManager y otro de tipo Notification.

// Variables de la notificacion
	NotificationManager nm;
	Notification notif;
	static String ns = Context.NOTIFICATION_SERVICE;
	
//Defino los iconos de la notificacion en la barra de notificacion
	int icono_v = R.drawable.n_icon2;
	int icono_r = R.drawable.n_icon3;
						

Ahora lo que hacemos es acceder al servicio de notificaciones por mediacion de la clase NotificationManager, después configuro y creo la notificación por medio de un método creado por mi para simplificar la creación de las notificaciones en el resto del programa.

// Inicio el servicio de notificaciones accediendo al servicio
	nm = (NotificationManager) getSystemService(ns);

// Realizo una notificacion por medio de un metodo hecho por mi
	notificacion(icono_r, "titulo contenido", "texto contenido", "texto extendido");

// Lanzo la notificacion creada en el paso anterior
	nm.notify(1, notif);
						

Este es el contenido del método que hemos llamado arriba, lo pongo así para simplificar la gestión de la notificación, ya que en mi aplicación la uso desde varios sitios, y no hay que repetir código!.

Básicamente lo que hacemos es pasarle los 3 textos que vamos a mostrar y el icono que vamos a mostrar, recuerda que se nos queda una notificación permanente, que si la pulsamos nos abrirá la Activity que definamos en ella, esto no es obligatorio, por lo que si no deseas que tu notificación no haga nada, simplemente no pongas la parte en la que creamos el Intent. Por ultimo en las ultimas 2 líneas definimos un Flag para hacer la notificación permanente, es decir que no podamos borrarla, si no queremos esto, simplemente no pongas la ultima línea notif.flags = Notification.FLAG_ONGOING_EVENT.

public void notificacion(int icon, CharSequence textoEstado, CharSequence titulo, CharSequence texto) {
		// Capturo la hora del evento
		long hora = System.currentTimeMillis();
		
		// Definimos la accion de la pulsacion sobre la notificacion (esto es opcional)
		Context context = getApplicationContext();
		Intent notificationIntent = new Intent(this, main.class);
		PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);

		// Defino la notificacion, icono, texto y hora
		notif = new Notification(icon, textoEstado, hora);
		notif.setLatestEventInfo(context, titulo, texto, contentIntent);
		
		//Defino que la notificacion sea permamente
		notif.flags = Notification.FLAG_ONGOING_EVENT;
	}
						

Ahora lo que me queda es decir como se eliminan las notificaciones, sobre todo si es permanente, por que las "normales" las elimina el propio usuario y no son ningún problema, pero... ¿como quitamos las permanentes? para eliminarla es fácil, accedemos al objeto que hemos usado para crear las notificaciones y usamos la propiedad cancel y el id de la notificación (que usamos al crearla).

// Quitamos notificaciones
		nm.cancel(1);
						

 

¿que os parece? no es complicado, como todo requiere practica y hacer varias pruebas, pero vamos si yo pude. ¡tu también! animo y si no te aclaras, pregunta en el foro.

Si te a gustado este sitio, por favor haz click en me gusta en Facebook, Google+, Tweeter... es el único precio que te pido por este trabajo! ;P. Compartiendo, ayudaras a otros a encontrar esta web! GRACIASSSS.