Notificaciones Android

Las notificaciones son una buena forma de darle feedback al usuario de que algo sucedió y le concierne, se debe usar estas con precaución sabiduría ya que el mal uso de las mismas podría llevar a que el usuario simplemente las inhabilite para nuestra aplicación.

NotificationCompat.Builder mBuilder =
    new NotificationCompat.Builder(this)
    .setSmallIcon(R.drawable.ic_launcher)
    .setContentTitle("Mi Aplicacion")
    .setContentText("Hola mundo");

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

int notificacion_id = 2345;

mNotificationManager.notify(notificacion_id, notification);

Asi de simple es que se crea una notificacion para el usuario en android.

Esta notificacion en si solo muestra un texto mas nada, pero si creamos una notificacion queremos que el usuarios haga click sobre ella y entre a una parte en particular de nuestra aplicacion, esto se logra de la siguiente manera:

        Intent intent = new Intent(this, MainActivity.class);
        intent.putExtra("key", "value");

        PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

        mBuilder.setContentIntent(contentIntent);

Simplemente creando un intent y agregándole uno que otro extra para ser leido luego en nuestra actividad. Tener pendiente el flag PendingIntent.FLAG_UPDATE_CURRENT ya que sin este los extras no estarán pasando hacia la actividad correctamente.

FLAG_UPDATE_CURRENT: Actualizara con la data del intent el intent pendiente.

De esa forma tendremos una notificación funcional que nos abrira la aplicación una vez sea presionado.

Para hacer que nuestra notificación tenga un sonido y/o muestre la luz de notificación solo hay que agregar esto a nuestro builder notification:

//Esto permitira que nuestra notificación active la luz de notificación de nuestro celular 
//y el segundo flag cerrara nuestra notificación una vez sea presionada.
notification.flags = Notification.DEFAULT_LIGHTS | Notification.FLAG_AUTO_CANCEL;

Sonido de la notificacion:

Uri toneUri = ... //la url apuntando a un sonido el cual queramos

//De esta forma sonara igual que nuestro default rintone.
toneUri = RingtoneManager.getActualDefaultRingtoneUri(getApplicationContext(), RingtoneManager.TYPE_RINGTONE); 

mBuilder.setSound(toneUri, RingtoneManager.TYPE_ALARM);

De esta forma nuestras notificaciones una vez sean lanzadas notificara con nuestro rintone actual.