Notificaciones

Notificaciones

  • Elemento de la interfaz que nos permite
    notificar al usuario
  • No depende de la Activity, se pueden lanzar
    en cualquier momento.
  • Android nos propociona varios tipos
    • Toast
    • SnackBar
    • De estado  

Toast

  • Notificaciones fugaces
  • Solo se muestra una simultáneamente
  • Se van apilando

 

//Forma de uso 1:
Context context = getApplicationContext();
CharSequence text = "Ha pasado algo bueno!";
int duration = Toast.LENGTH_SHORT; //También puede ser Toast.LENGTH_LONG;

Toast toast = Toast.makeText(context, text, duration);
toast.show();

//Forma de uso 2
Toast.makeText(context, text, duration).show();

//Ejemplo tipico en debug
Toast.makeText(getApplicationContext(), "Uff", Toast.LENGTH_LONG).show();

SnackBar

  • Nuevos "toast", más potentes: permiten añadir una acción
  • Requieren el uso de Android dessign support library
  • Materials
// En build.gradle (app)
dependencies {
    .
    compile 'com.android.support:design:22.2.0'
    .
}
// parentLayout: ViewGroup donde lo queremos mostrar
// R.string.snackbar_text texto a mostrar definido en strings.xml
Snackbar
  .make(parentLayout, R.string.snackbar_text, Snackbar.LENGTH_LONG)
  .setAction(R.string.snackbar_action, myOnClickListener)
  .show(); // Importante!!! No olvidar mostrar la Snackbar.

Notificación de estado

  • Se muestran en la StatusBar
  • Pueden tener acciónes asociada
  • Se puede configurar su vida

Mostrar notificación de estado

  1. Instanciamos el Notification Manager
//Instanciamos Notification Manager 
NotificationManager 
    mNotificationManager = (NotificationManager) 
                                getSystemService(Context.NOTIFICATION_SERVICE);

Ejemplo (basica) - I

 

1 - Configuramos nuestra Special Activity en nuestro Manifest:

  • android:name="activityName"
  • android:taskAffinity=""
  • android:excludeFromRecents="true"

Una Special Activity es usada normalmente para mostrar información que normalmente no cabe en la notificación.

No necesitamos crear un Back Stack ya que esta Activity no suele ser parte del flow de la Activity.

 

Ejemplo (básico) - II

  1. Creamos un Intent que empiece la Actvity
  2. Indicamos que la Activity empiece en una nueva task indicando los Flags.
  3. Configuramos las opciones para el Intent.
  4. Creamos un PendingIntent

Ejemplo (básico) - III

// Para la notificaciones, en lugar de crearlas directamente, lo hacemos mediante 
// un Builder/contructor.
NotificationCompat.Builder mBuilder =
        new NotificationCompat.Builder(this)
        .setSmallIcon(R.drawable.notification_icon)
        .setContentTitle("Notificación")
        .setContentText("Bienvenidos a los mundos de Yupi!!");


// Creamos un intent explicito, para abrir la app desde nuestra notificación
Intent resultIntent = new Intent(getApplicationContext(), ResultActivity.class);

// Indicamos que la Activity empiece en una nueva task
resultIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                        | Intent.FLAG_ACTIVITY_CLEAR_TASK);


// Creamos el PendingIntent
PendingIntent notifyPendingIntent =
    PendingIntent.getActivity(
        this,
        0,
        resultIntent,
        PendingIntent.FLAG_UPDATE_CURRENT
    );


mBuilder.setContentIntent(notifyPendingIntent);

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

// mId es un identificador que nos permitirá 
// actualizar la notificación más adelante
mNotificationManager.notify(mId, mBuilder.build());

Notificaciones Extendidas

Notificaciones Extendidas

Antes del build debemos crear un estilo (existen 3)

NotificationCompat.BigPictureStyle
NotificationCompat.BigTextStyle
NotificationCompat.InboxStyle

Se crea el estilo y se asigna mediante el builder

NotificationCompat.BigTextStyle bigTextStyle = new
NotificationCompat.BigTextStyle();
bigTextStyle.setBigContentTitle("BigContentTitle");
bigTextStyle.setSummaryText("Resumen, lalalalalalala");
bigTextStyle.bigText(“TextoLargo”);

mBuilder.setStyle(bigTextStyle);
Notification noti = mBuilder.build();

Extras

  •  Una vez construida la notificación podemos añadir algunos extras modificando directamente sus atributos
  •  Pueden incluir sonido
     
//sonido default
notification.defaults |= Notification.DEFAULT_SOUND;
//sonido curstom
notification.sound = Uri.parse(RUTA AL RECURSO);
//vibración normal
noti.defaults |= Notification.DEFAULT_VIBRATE
//O patrón de vibración propio
long [] vibrate = {0, 100, 200, 300}
Notification.vibrate = vibrate;

  • Pueden incluir vibración

Extras

  •  Podemos definir FLAGS
    • FLAG_AUTO_CANCEL
    • FLAG_INSISTENT
    •  FLAG_ONGOING_EVENT
    • FLAG_NO_CLEAR
  • Cada estilo tiene propiedades diferentes

Mostrar notificación de estado

  2. Inicializamos nuestra notificación (mediante un builder) y el intent explicito

NotificationCompat.Builder mBuilder =
        new NotificationCompat.Builder(this)
        .setSmallIcon(R.drawable.notification_icon)
        .setContentTitle("Notificación")
        .setContentText("Bienvenidos a los mundos de Yupi!!");

Intent resultIntent = new Intent(getApplicationContext(), YupiActivity.class);

  3. Generamos una stack artificial de activites y le adjuntamos el intent

Mostrar notificación de estado

TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
//Ponemos la activity que abriremos en la stack
stackBuilder.addParentStack(YupiActivity.class);
//Ponemos el intent en el top de la stack
stackBuilder.addNextIntent(resultIntent);

PendingIntent resultPendingIntent =
        stackBuilder.getPendingIntent(
            0,
            PendingIntent.FLAG_UPDATE_CURRENT
        );

mBuilder.setContentIntent(resultPendingIntent);

Mostrar notificación de estado

  4. Generamos la notificación y la enviamos

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

Ejemplo Completo

//Instanciamos Notification Manager 
NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

// Para la notificaciones, en lugar de crearlas directamente, lo hacemos mediante 
// un Builder/contructor.
NotificationCompat.Builder mBuilder =
        new NotificationCompat.Builder(this)
        .setSmallIcon(R.drawable.notification_icon)
        .setContentTitle("Notificación")
        .setContentText("Bienvenidos a los mundos de Yupi!!");
// Creamos un intent explicito, para abrir la app desde nuestra notificación
Intent resultIntent = new Intent(getApplicationContext(), YupiActivity.class);
//Generamos la backstack y le añadimos el intent
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addParentStack(YupiActivity.class);
stackBuilder.addNextIntent(resultIntent);
//Obtenemos el pending intent
PendingIntent resultPendingIntent =
        stackBuilder.getPendingIntent(
            0,
            PendingIntent.FLAG_UPDATE_CURRENT
        );

mBuilder.setContentIntent(resultPendingIntent);

// mId es un identificador que nos permitirá actualizar la notificación 
// más adelante
mNotificationManager.notify(mId, mBuilder.build());
Made with Slides.com