5 Notificaciones

Tenemos diferentes maneras de informar al usuario algún suceso que afecte a nuestra Aplicación y para ello nos valemos de las notificaciones, en algunos casos es necesaria la intervención del mismo usuario pero en otras es solo para informarle de lo ocurrido.

Para eso a continuación aprenderemos a hacer uso de las notificaciones Toast, Dialog, Push y, Snackbar

5.1 Toast

Existen diferentes formas para mostrarlas en pantalla.

Toast normal

Toast ToastNormal =  Toast.makeText(ToastActivity.this, "Mensaje Toast Normal", Toast.LENGTH_SHORT);
                ToastNormal.show();
Curso Android

Toast en una ubicación específica con la propiedad Gravity

Toast ToastGravity =  Toast.makeText(ToastActivity.this, "Mensaje Toast Gravity", Toast.LENGTH_SHORT);
                ToastGravity.setGravity(Gravity.CENTER,0,0);
                ToastGravity.show();
Curso Android

Toast personalizado, cambiando tamaño de la fuente y el color de fondo

Para esto necesitamos un Layout para diseñar nuestro Toast

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ToastCustom1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="50dp"
    android:background="#ff6347">

    <TextView android:id="@+id/LblToastCustom"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#ffffff"
        android:textSize="40dp"
        android:text="Error    Toast custom"
        />

</LinearLayout>
LayoutInflater Inflater = getLayoutInflater();
                View Layout = Inflater.inflate(R.layout.toast_custom, (ViewGroup) findViewById(R.id.ToastCustom1));
                Toast toast = new Toast(getApplicationContext());
                toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
                toast.setDuration(Toast.LENGTH_LONG);
                toast.setView(Layout);
                toast.show();
Curso Android

Toast personalizado, agregando un icono y cambiando el color de la fuente y del fondo

También necesitaremos un Layout con el diseño del Toast

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ToastCustom2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="20dp"
android:background="#c6ffc6">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">

<ImageView android:id="@+id/imgIcono"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:src="@drawable/ic_check_circle_black_24dp"
android:paddingRight="10dp"/>

<TextView android:id="@+id/LblToastCustom"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#034300"
android:text="Aprobado"
/>

</LinearLayout>
</LinearLayout>
LayoutInflater Inflater = getLayoutInflater();
                View Layout = Inflater.inflate(R.layout.toast_custom_2, (ViewGroup) findViewById(R.id.ToastCustom2));
                Toast toast = new Toast(getApplicationContext());
                toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
                toast.setDuration(Toast.LENGTH_LONG);
                toast.setView(Layout);
                toast.show();
Curso Android

5.2 Dialog

La notificación por medio de un diálogo de alerta la podemos utilizar para pedir una acción al usuario, puede ser una confirmación o la captura de un dato.

Este diálogo es generado por el propio Sistema Operativo, solamente le mandamos los parámetros como Title, Message para que se muestre en el diálogo, además de los botones de acción con su respectiva función con disposición de tres botones, el de respuesta positiva, respuesta negativa y respuesta neutral.

En este dialogo le asignamos Titulo, Mensaje y Botones con sus respectivos ClickListener para ejecutar las acciones antes de mostrarlo.

                builder.setTitle("Titulo del dialogo")
                        .setMessage("Descripción para el usuario")
                        .setPositiveButton("OK",
                                new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {
                                        Toast.makeText(DialogoActivity.this, "Respuesta Positiva", Toast.LENGTH_SHORT).show();
                                    }
                                })
                        .setNegativeButton("CANCELAR",
                                new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {
                                        Toast.makeText(DialogoActivity.this, "Respuesta Negativa", Toast.LENGTH_SHORT).show();
                                    }
                                })
                        .setNeutralButton("DESPUES",
                                new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialogInterface, int i) {
                                        Toast.makeText(DialogoActivity.this, "Respuesta Neutral", Toast.LENGTH_SHORT).show();
                                    }
                                });
                builder.show();
Curso Android

Listo, se ejecutará la función del botón que se haya presionado.

También podemos usar diálogos más personalizados creados con un Layout agregando los EditText, TextView, Buttons, etc.
Lo que se hace es crear el dialogo asignándole el Layout que creamos con el evento onCreateDialog.

Primero onCreateDialog crea el dialogo con el Layout

 @Override
    protected Dialog onCreateDialog(int id) {
        AlertDialog dialogDetails = null;

        switch (id) {
            case DIALOG:
                LayoutInflater inflater = LayoutInflater.from(this);
                View dialogview = inflater.inflate(R.layout.dialog_layout, null);

                AlertDialog.Builder dialogbuilder = new AlertDialog.Builder(this);
                dialogbuilder.setCancelable(false);
                dialogbuilder.setView(dialogview);
                dialogDetails = dialogbuilder.create();
                break;
        }
        return dialogDetails;
    }

Ahora onPrepareDialog Instancia los controles y los Click con sus respectivas funciones.

@Override
    protected void onPrepareDialog(int id, Dialog dialog) {
        switch (id) {
            case DIALOG:
                //Instanciamos todos los controles que contiene nuestro dialogo
                final AlertDialog alertDialog = (AlertDialog) dialog;
                final EditText TxtDescripcion = (EditText) alertDialog.findViewById(R.id.TxtDescripcion);

                final Button BtnAceptar = (Button) alertDialog.findViewById(R.id.BtnAceptar);
                final Button BtnCancelar = (Button) alertDialog.findViewById(R.id.BtnCancelar);

                BtnAceptar.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Toast.makeText(DialogoActivity.this, TxtDescripcion.getText().toString(), Toast.LENGTH_SHORT).show();
                        TxtDescripcion.setText("");
                        alertDialog.dismiss();
                    }
                });
                BtnCancelar.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        alertDialog.dismiss();
                    }
                });

                break;
        }
    }

Finalmente es llamado con

showDialog(DIALOG);

La variable DIALOG la declaramos al inicio y podemos usar los diálogos que necesitamos, con un Switch podemos configurar los diálogos por separado.

Curso Android

5.3 Push

Las notificaciones Push se usan generalmente en aplicaciones conectadas a un servidor como Firebase, Amazon Web Services, Azure o hasta por medio de PHP para recibir precisamente notificaciones de lo que sucede en esos servidores con nuestra respectiva cuenta, alguna actividad por hacer o un mensaje recibido, etc. Ahora solo veremos cómo mostrarlas.

Curso Android

Podemos elegir el icono que se mostrará en la barra de notificación, el sonido cuando aparezca, si activa vibración, un título, una descripción y una acción para cuando la presionemos.

NotificationCompat.Builder mBuilder;
                NotificationManager mNotifyMgr =(NotificationManager) getApplicationContext().getSystemService(NOTIFICATION_SERVICE);

                Intent i=new Intent(PushActivity.this, Notificaciones.class);
                PendingIntent pendingIntent = PendingIntent.getActivity(PushActivity.this, 0, i, 0);

                int Icono = R.drawable.ic_videogame_asset_black_24dp;
                Uri NotificacionSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

                mBuilder =new NotificationCompat.Builder(getApplicationContext())
                        .setContentIntent(pendingIntent)
                        .setSmallIcon(Icono)
                        .setContentTitle("Mi App")
                        .setContentText("Abrir la app en Notificaciones")
                        .setVibrate(new long[] {100, 250, 100, 500})
                        .setSound(NotificacionSound)
                        .setAutoCancel(true);

                mNotifyMgr.notify(1, mBuilder.build());

Con esto nos aseguramos que aparezca nuestra notificación y que al presionarla nos mande a la sección de notificaciones de nuestra aplicación, en este caso, o a cualquier aplicación que queramos.

Curso Android

5.4 Snackbar

La Snackbar aparece desde abajo y dura unos segundos mostrando un mensaje y además puede requerir una acción con un Botón de texto.

 Snackbar.make(Btn, "Snackbar Notificación", Snackbar.LENGTH_LONG)
                        .setAction("Toast", new View.OnClickListener() {
                            @Override
                            public void onClick(View view) {
                                Toast.makeText(SnackbarActivity.this, "Toast Ejemplo", Toast.LENGTH_SHORT).show();
                            }
                        }).show();
Curso Android

En este caso nuestra Snackbar muestra un Toast