Cómo hacer notificaciones push en Android fácil
En este post vamos a ver cómo crear y lanzar notificaciones en Android . Las Notificaciones Push son mensajes que recibimos en el dispositivo y que han sido emitidos desde un servidor que gestiona el envío de información relevante al usuario.
Las notificaciones por tanto ofrecen al usuario información en tiempo real sobre novedades que están ocurriendo en los datos de la aplicación, por ejemplo que ha recibido un nuevo mensaje de otro usuario o que se ha publicado una nueva oferta que puede interesarle o por ejemplo que ha llegado la hora de comer y le sugerimos algún restaurante próximo a donde se encuentra.
Lo que vamos a crear, va a ser una aplicación en la que pulsando un botón, lanzaremos una notificación a la barra de notificaciones mostrando un texto.
En este caso vamos a usar dos Activities (pantallas) el principal y uno que mostraremos al pulsar en el notificación.
1. Diseño de la Interfaz de Usuario
Una vez creado nuestro proyecto, tendremos una clase princial MainActivity con su correspondiente layout (interfaz de usuario). En este layout vamos a incluir sólo un objeto de tipo Button, que será el botón que nos permita lanzar al Notificación:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<Button
android:id="@+id/btnMostrarNotificacion"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Mostrar Notificacion" />
</RelativeLayout>
Tendremos por tanto un diseño como el que se muestra en la siguiente imagen:
Y en el otro layout crearemos un TextView en el que aparezca un mensaje, indicando que se ha recibido la Notificación:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.example.jorge.myapplication.MensajeActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Notificación Recibida"
android:id="@+id/textView"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true" />
</RelativeLayout>
2. Creando la notificación
Una vez diseñado el layout nos dirigimos a la clase Java de nuestro MainActivity e inicializamos nuestro botón asignándolo el evento OnClickListener. Asignamos dicho evento al botón, mediante el método setOnClickListener , tal y como se muestra a continuación:
public class MainActivity extends AppCompatActivity {
Button mostrarNotificacion;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mostrarNotificacion = (Button)findViewById(R.id.btnMostrarNotificacion);
mostrarNotificacion.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
}
}
Ahora, procedemos a crear nuestra notificación. Para ello usaremos la clase Notification.Builder y la clase NotificationManager .
NotificationCompat.Builder mBuilder;
NotificationManager mNotifyMgr =(NotificationManager) getApplicationContext().getSystemService(NOTIFICATION_SERVICE);
La notificación consta de varios elementos visuales como son: el icono de la misma, el título y la descripción. Existe además un componente que gestiona el Activity o pantalla que se lanza cuando un usuario hace click sobre la notificación, hablamos del componente PendingIntent :
int icono = R.mipmap.ic_launcher;
Intent intent = new Intent(MainActivity.this, MensajeActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this, 0,intent, 0);
En este caso, en el código anterior podemos observar que se ha definido un Activity, llamado MensajeActivity y que será el Activity que se lance cuando el usuario haga click en la notificación
A continuación, vamos a diseñar nuestra notificación; para asignamos al objeto mBuilder anteriormente creado al método NotificationCompat.Builder() , al cual le debemos pasar como parámetro el contexto desde donde se va a lanzar la notificación, en nuestro caso, usaremos getApplicationContext () quedando la siguiente línea de código:
mBuilder = new NotificationCompat.Builder(getApplicationContext());
A continuación, vamos a proceder a añadirle a la notificación el icono, los textos y la acción:
- setContentIntent (pendingIntent): Este método nos permite que al hacer click sobre la notificación se abra el Activity que definimos en el PendingIntent anteriormente creado.
- setSmallIcon (icono): Este método añade a nuestra notificación el icono que inicializamos anteriormente.
- setContentTitle (“Openwebinars”) : Añade el título de la notificación.
- setContentText(“Tienes 1 nuevo mensaje”): Añade el mensaje descriptivo a la notificación.
- setVibrate(new long[] {100, 250, 100, 500}): Esto hace que cuando salte la notificación vibre nuestro teléfono.
- setAutoCancel(true): este método hace que al hacer click sobre la notificación esta desaparezca.
Al añadir todos estos métodos nos queda un bloque de código como el siguiente:
mBuilder =new NotificationCompat.Builder(getApplicationContext())
.setContentIntent(pendingIntent)
.setSmallIcon(icono)
.setContentTitle("Titulo")
.setContentText("Hola que tal?")
.setVibrate(new long[] {100, 250, 100, 500})
.setAutoCancel(true);
Ya sólo falta crear la notificación. Para ello invocamos al NotificationManager que creamos arriba cuyo variable declaramos con el nombre mNotifyMgr y le añadimos el método . notify () al cual hay que pasarle como parámetros un número entero que actúa como identificador único de la notificación, en nuestro caso le pondremos 1; y el segundo parámetro NotificationCompat.Builder creado al comienzo con el nombre de variable mBuilder , quedando la siguiente línea de código:
mNotifyMgr.notify(1, mBuilder.build());
A continuación se muestra el código completo:
public class MainActivity extends AppCompatActivity {
Button mostrarNotificacion;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mostrarNotificacion=(Button)findViewById(R.id.btnMostrarNotificacion);
mostrarNotificacion.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
NotificationCompat.Builder mBuilder;
NotificationManager mNotifyMgr =(NotificationManager) getApplicationContext().getSystemService(NOTIFICATION_SERVICE);
int icono = R.mipmap.ic_launcher;
Intent i=new Intent(MainActivity.this, MensajeActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this, 0, i, 0);
mBuilder =new NotificationCompat.Builder(getApplicationContext())
.setContentIntent(pendingIntent)
.setSmallIcon(icono)
.setContentTitle("Titulo")
.setContentText("Hola que tal?")
.setVibrate(new long[] {100, 250, 100, 500})
.setAutoCancel(true);
mNotifyMgr.notify(1, mBuilder.build());
}
});
}
}