Android - Notificaciones

UNA notificationes un mensaje que puede mostrar al usuario fuera de la interfaz de usuario normal de su aplicación. Cuando le dice al sistema que emita una notificación, primero aparece como un icono en el área de notificación. Para ver los detalles de la notificación, el usuario abre el cajón de notificaciones. Tanto el área de notificación como el cajón de notificaciones son áreas controladas por el sistema que el usuario puede ver en cualquier momento.

Androide Toast La clase proporciona una forma práctica de mostrar alertas a los usuarios, pero el problema es que estas alertas no son persistentes, lo que significa que la alerta parpadea en la pantalla durante unos segundos y luego desaparece.

Para ver los detalles de la notificación, deberá seleccionar el icono que mostrará el cajón de notificaciones con detalles sobre la notificación. Mientras trabaja con el emulador con dispositivo virtual, tendrá que hacer clic y arrastrar hacia abajo la barra de estado para expandirla, lo que le dará los detalles a continuación. Esto sera solo64 dp alto y llamado vista normal.

La forma expandida anterior puede tener un Big Viewque tendrá detalles adicionales sobre la notificación. Puede agregar hasta seis líneas adicionales en la notificación. La siguiente captura de pantalla muestra dicha notificación.

Crear y enviar notificaciones

Tiene una forma sencilla de crear una notificación. Siga los siguientes pasos en su aplicación para crear una notificación:

Paso 1: crear un generador de notificaciones

Como primer paso es crear un generador de notificaciones usando NotificationCompat.Builder.build () . Utilizará el Generador de notificaciones para configurar varias propiedades de notificación, como sus iconos pequeños y grandes, título, prioridad, etc.

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)

Paso 2: configuración de las propiedades de notificación

Una vez que tengas Builderobjeto, puede establecer sus propiedades de notificación utilizando el objeto Builder según sus requisitos. Pero esto es obligatorio para establecer al menos lo siguiente:

  • Un pequeño icono, establecido por setSmallIcon()

  • Un título, establecido por setContentTitle()

  • Texto detallado, establecido por setContentText()

mBuilder.setSmallIcon(R.drawable.notification_icon);
mBuilder.setContentTitle("Notification Alert, Click Me!");
mBuilder.setContentText("Hi, This is Android Notification Detail!");

Tiene muchas propiedades opcionales que puede configurar para su notificación. Para obtener más información sobre ellos, consulte la documentación de referencia de NotificationCompat.Builder.

Paso 3: adjuntar acciones

Esta es una parte opcional y necesaria si desea adjuntar una acción con la notificación. Una acción permite a los usuarios pasar directamente de la notificación a unaActivity en su aplicación, donde pueden ver uno o más eventos o seguir trabajando.

La acción está definida por un PendingIntent que contiene un Intentque inicia una actividad en su aplicación. Para asociar PendingIntent con un gesto, llame al método apropiado de NotificationCompat.Builder . Por ejemplo, si desea iniciar Activity cuando el usuario hace clic en el texto de notificación en el cajón de notificaciones, agregue el PendingIntent llamandosetContentIntent().

Un objeto PendingIntent le ayuda a realizar una acción en nombre de sus aplicaciones, a menudo en un momento posterior, sin importar si su aplicación se está ejecutando o no.

Tomamos la ayuda del objeto generador de pila que contendrá una pila posterior artificial para la actividad iniciada. Esto asegura que navegar hacia atrás desde la Actividad conduce fuera de su aplicación a la pantalla de Inicio.

Intent resultIntent = new Intent(this, ResultActivity.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addParentStack(ResultActivity.class);

// Adds the Intent that starts the Activity to the top of the stack
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0,PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.setContentIntent(resultPendingIntent);

Paso 4: emita la notificación

Finalmente, pasa el objeto de notificación al sistema llamando a NotificationManager.notify () para enviar su notificación. Asegúrate de llamarNotificationCompat.Builder.build()en el objeto constructor antes de notificarlo. Este método combina todas las opciones que se han establecido y devuelve un nuevoNotification objeto.

NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    
// notificationID allows you to update the notification later on.
mNotificationManager.notify(notificationID, mBuilder.build());

La clase NotificationCompat.Builder

La clase NotificationCompat.Builder permite un control más fácil sobre todos los indicadores, además de ayudar a construir los diseños de notificación típicos. A continuación, se muestran algunos métodos importantes y utilizados con más frecuencia que están disponibles como parte de la clase NotificationCompat.Builder.

No Señor. Constantes y descripción
1

Notification build()

Combine todas las opciones que se han establecido y devuelva un nuevo objeto de notificación.

2

NotificationCompat.Builder setAutoCancel (boolean autoCancel)

Establecer esta bandera hará que la notificación se cancele automáticamente cuando el usuario haga clic en ella en el panel.

3

NotificationCompat.Builder setContent (RemoteViews views)

Proporcione un RemoteView personalizado para usar en lugar del estándar.

4

NotificationCompat.Builder setContentInfo (CharSequence info)

Configure el texto grande en el lado derecho de la notificación.

5

NotificationCompat.Builder setContentIntent (PendingIntent intent)

Proporcione un PendingIntent para enviar cuando se haga clic en la notificación.

6

NotificationCompat.Builder setContentText (CharSequence text)

Configure el texto (segunda fila) de la notificación, en una notificación estándar.

7

NotificationCompat.Builder setContentTitle (CharSequence title)

Configure el texto (primera fila) de la notificación, en una notificación estándar.

8

NotificationCompat.Builder setDefaults (int defaults)

Configure las opciones de notificación predeterminadas que se utilizarán.

9

NotificationCompat.Builder setLargeIcon (Bitmap icon)

Establezca el icono grande que se muestra en el ticker y la notificación.

10

NotificationCompat.Builder setNumber (int number)

Establezca el número grande en el lado derecho de la notificación.

11

NotificationCompat.Builder setOngoing (boolean ongoing)

Establezca si se trata de una notificación en curso.

12

NotificationCompat.Builder setSmallIcon (int icon)

Configure el icono pequeño para usar en los diseños de notificación.

13

NotificationCompat.Builder setStyle (NotificationCompat.Style style)

Agregue un estilo de notificación enriquecido para aplicar en el momento de la compilación.

14

NotificationCompat.Builder setTicker (CharSequence tickerText)

Configure el texto que se muestra en la barra de estado cuando llega la notificación por primera vez.

15

NotificationCompat.Builder setVibrate (long[] pattern)

Establezca el patrón de vibración que se utilizará.

dieciséis

NotificationCompat.Builder setWhen (long when)

Establezca la hora en que ocurrió el evento. Las notificaciones en el panel están ordenadas por este tiempo.

Ejemplo

El siguiente ejemplo muestra la funcionalidad de una notificación de Android usando un NotificationCompat.Builder Clase que se ha introducido en Android 4.1.

Paso Descripción
1 Utilizará Android Studio IDE para crear una aplicación de Android y nombrarla como tutorialspoint en un paquete com.example.notificationdemo .
2 Modifique el archivo src / MainActivity.java y agregue el código para notificar (""), si el usuario hace clic en el botón, llamará al servicio de notificación de Android.
3 Cree un nuevo archivo Java src / NotificationView.java , que se utilizará para mostrar el nuevo diseño como parte de la nueva actividad que se iniciará cuando el usuario haga clic en cualquiera de las notificaciones.
4 Modifique el archivo XML de diseño res / layout / activity_main.xml para agregar el botón de notificación en el diseño relativo.
5 Cree un nuevo archivo XML de diseño res / layout / notification.xml . Esto se utilizará como archivo de diseño para la nueva actividad que se iniciará cuando el usuario haga clic en cualquiera de las notificaciones.
6 No es necesario cambiar las constantes de cadena predeterminadas. Android Studio se encarga de las constantes de cadena predeterminadas
7 Ejecute la aplicación para iniciar el emulador de Android y verifique el resultado de los cambios realizados en la aplicación.

A continuación se muestra el contenido del archivo de actividad principal modificado src/com.example.notificationdemo/MainActivity.java. Este archivo puede incluir cada uno de los métodos fundamentales del ciclo de vida.

package com.example.notificationdemo;

import android.app.Activity;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.support.v4.app.NotificationCompat;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {
   Button b1;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      b1 = (Button)findViewById(R.id.button);
      b1.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            addNotification();
         }
      });
   }

   private void addNotification() {
      NotificationCompat.Builder builder =
         new NotificationCompat.Builder(this)
         .setSmallIcon(R.drawable.abc)
         .setContentTitle("Notifications Example")
         .setContentText("This is a test notification");

      Intent notificationIntent = new Intent(this, MainActivity.class);
      PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent,
         PendingIntent.FLAG_UPDATE_CURRENT);
      builder.setContentIntent(contentIntent);

      // Add as notification
      NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
      manager.notify(0, builder.build());
   }
}

A continuación se mostrará el contenido de res/layout/notification.xml archivo -

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent" >
   
   <TextView
      android:layout_width="fill_parent"
      android:layout_height="400dp"
      android:text="Hi, Your Detailed notification view goes here...." />
</LinearLayout>

A continuación se muestra el contenido del archivo de actividad principal modificado src/com.example.notificationdemo/NotificationView.java.

package com.example.notificationdemo;

import android.os.Bundle;
import android.app.Activity;

public class NotificationView extends Activity{
   @Override
   public void onCreate(Bundle savedInstanceState){
      super.onCreate(savedInstanceState);
      setContentView(R.layout.notification);
   }
}

A continuación se mostrará el contenido de res/layout/activity_main.xml archivo -

<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:paddingBottom="@dimen/activity_vertical_margin"
   android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   tools:context="MainActivity">
   
   <TextView
      android:id="@+id/textView1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Notification Example"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true"
      android:textSize="30dp" />
      
   <TextView
      android:id="@+id/textView2"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Tutorials point "
      android:textColor="#ff87ff09"
      android:textSize="30dp"
      android:layout_below="@+id/textView1"
      android:layout_centerHorizontal="true"
      android:layout_marginTop="48dp" />
      
   <ImageButton
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/imageButton"
      android:src="@drawable/abc"
      android:layout_below="@+id/textView2"
      android:layout_centerHorizontal="true"
      android:layout_marginTop="42dp" />
      
   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Notification"
      android:id="@+id/button"
      android:layout_marginTop="62dp"
      android:layout_below="@+id/imageButton"
      android:layout_centerHorizontal="true" />
      
</RelativeLayout>

A continuación se mostrará el contenido de res/values/strings.xml para definir dos nuevas constantes -

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <string name="action_settings">Settings</string>
   <string name="app_name">tutorialspoint </string>  
</resources>

A continuación se muestra el contenido predeterminado de AndroidManifest.xml -

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.notificationdemo" >
   
   <application
      android:allowBackup="true"
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
      
      <activity
         android:name="com.example.notificationdemo.MainActivity"
         android:label="@string/app_name" >
         
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
            
      </activity>
      
      <activity android:name=".NotificationView"
         android:label="Details of notification"
         android:parentActivityName=".MainActivity">
         <meta-data
         android:name="android.support.PARENT_ACTIVITY"
         android:value=".MainActivity"/>
      </activity>
      
   </application>
</manifest>

Intentemos ejecutar tu tutorialspointsolicitud. Supongo que habías creado tuAVDmientras realiza la configuración del entorno. Para ejecutar la APLICACIÓN desde Android Studio, abra uno de los archivos de actividad de su proyecto y haga clic en el icono Ejecutar de la barra de herramientas. Android Studio instala la aplicación en su AVD y la inicia y, si todo está bien con su configuración y aplicación, se mostrará la siguiente ventana del emulador:

Ahora haga clic button, verá en la parte superior un mensaje "¡Alerta de mensaje nuevo!" se mostrará momentáneamente y luego tendrá la siguiente pantalla con un pequeño ícono en la esquina superior izquierda.

Ahora vamos a expandir la vista, haga clic largo en el ícono pequeño, después de un segundo mostrará la información de la fecha y este es el momento en que debe arrastrar la barra de estado hacia abajo sin soltar el mouse. Verá que la barra de estado se expandirá y obtendrá la siguiente pantalla:

Notificación de Big View

El siguiente fragmento de código demuestra cómo modificar la notificación creada en el fragmento anterior para usar el estilo de vista grande de la Bandeja de entrada. Voy a actualizar el método de modificación displayNotification () para mostrar esta funcionalidad -

protected void displayNotification() {
   Log.i("Start", "notification");

   /* Invoking the default notification service */
   NotificationCompat.Builder  mBuilder = new NotificationCompat.Builder(this);
   
   mBuilder.setContentTitle("New Message");
   mBuilder.setContentText("You've received new message.");
   mBuilder.setTicker("New Message Alert!");
   mBuilder.setSmallIcon(R.drawable.woman);
   
   /* Increase notification number every time a new notification arrives */
   mBuilder.setNumber(++numMessages);
   
   /* Add Big View Specific Configuration */
   NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
   
   String[] events = new String[6];
   events[0] = new String("This is first line....");
   events[1] = new String("This is second line...");
   events[2] = new String("This is third line...");
   events[3] = new String("This is 4th line...");
   events[4] = new String("This is 5th line...");
   events[5] = new String("This is 6th line...");
   
   // Sets a title for the Inbox style big view
   inboxStyle.setBigContentTitle("Big Title Details:");
   
   // Moves events into the big view
   for (int i=0; i < events.length; i++) {
      inboxStyle.addLine(events[i]);
   }
   
   mBuilder.setStyle(inboxStyle);
   
   /* Creates an explicit intent for an Activity in your app */
   Intent resultIntent = new Intent(this, NotificationView.class);
   
   TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
   stackBuilder.addParentStack(NotificationView.class);

   /* Adds the Intent that starts the Activity to the top of the stack */
   stackBuilder.addNextIntent(resultIntent);
   PendingIntent resultPendingIntent =stackBuilder.getPendingIntent(0,PendingIntent.FLAG_UPDATE_CURRENT);
   
   mBuilder.setContentIntent(resultPendingIntent);
   mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
   
   /* notificationID allows you to update the notification later on. */
   mNotificationManager.notify(notificationID, mBuilder.build());
}

Ahora, si intenta ejecutar su aplicación, encontrará el siguiente resultado en la forma expandida de la vista: