Tutorial: uso de notificaciones locales en Xamarin. AndroidWalkthrough - Using local notifications in Xamarin.Android

En este tutorial se muestra cómo usar las notificaciones locales en las aplicaciones de Xamarin. Android. Muestra los aspectos básicos de la creación y publicación de una notificación local. Cuando el usuario hace clic en la notificación en el área de notificación, inicia una segunda actividad.This walkthrough demonstrates how to use local notifications in Xamarin.Android applications. It demonstrates the basics of creating and publishing a local notification. When the user clicks the notification in the notification area, it starts up a second Activity.

Información generalOverview

En este tutorial, se creará una aplicación de Android que genera una notificación cuando el usuario hace clic en un botón de una actividad.In this walkthrough, we will create an Android application that raises a notification when the user clicks a button in an Activity. Cuando el usuario hace clic en la notificación, inicia una segunda actividad que muestra el número de veces que el usuario hizo clic en el botón de la primera actividad.When the user clicks the notification, it launches a second Activity that displays the number of times the user had clicked the button in the first Activity.

En las siguientes capturas de pantallas se muestran algunos ejemplos de esta aplicación:The following screenshots illustrate some examples of this application:

capturas de pantallas de ejemplo con notificaciónExample screenshots with notification

Nota

Esta guía se centra en las API de NotificationCompat de la biblioteca de compatibilidad de Android.This guide focuses on the NotificationCompat APIs from the Android support library. Estas API garantizarán la máxima compatibilidad con versiones anteriores de Android 4,0 (nivel de API 14).These APIs will ensure maximum backwards compatibility to Android 4.0 (API level 14).

Crear el proyectoCreating the project

Para empezar, vamos a crear un nuevo proyecto de Android con la plantilla de aplicación de Android .To begin, let's create a new Android project using the Android App template. Vamos a llamar a este proyecto LocalNotifications.Let's call this project LocalNotifications. (Si no está familiarizado con la creación de proyectos de Xamarin. Android, consulte Hello, Android).(If you are not familiar with creating Xamarin.Android projects, see Hello, Android.)

Edite el archivo de recursos Values/Strings. XML para que contenga dos recursos de cadena adicionales que se usarán cuando sea el momento de crear el canal de notificación:Edit the resource file values/Strings.xml so that it contains two extra string resources that will be used when it is time to create the notification channel:

<?xml version="1.0" encoding="utf-8"?>

<resources>
  <string name="Hello">Hello World, Click Me!</string>
  <string name="ApplicationName">Notifications</string>

  <string name="channel_name">Local Notifications</string>
  <string name="channel_description">The count from MainActivity.</string>
</resources>

Adición del paquete de NuGet Android. support. V4Add the Android.Support.V4 NuGet package

En este tutorial, usamos NotificationCompat.Builder para compilar la notificación local.In this walkthrough, we are using NotificationCompat.Builder to build our local notification. Tal como se explica en las notificaciones locales, debemos incluir la biblioteca de compatibilidad de Android V4 NuGet en nuestro proyecto para usar NotificationCompat.Builder.As explained in Local Notifications, we must include the Android Support Library v4 NuGet in our project to use NotificationCompat.Builder.

A continuación, vamos a editar MainActivity.CS y agregaremos la siguiente instrucción de using para que los tipos de Android.Support.V4.App estén disponibles para nuestro código:Next, let's edit MainActivity.cs and add the following using statement so that the types in Android.Support.V4.App are available to our code:

using Android.Support.V4.App;

Además, debemos aclarar el compilador que estamos usando la versión Android.Support.V4.App de TaskStackBuilder en lugar de la versión Android.App.Also, we must make it clear to the compiler that we are using the Android.Support.V4.App version of TaskStackBuilder rather than the Android.App version. Agregue la siguiente instrucción using para resolver cualquier ambigüedad:Add the following using statement to resolve any ambiguity:

using TaskStackBuilder = Android.Support.V4.App.TaskStackBuilder;

Crear el canal de notificaciónCreate the notification channel

Después, agregue un método a MainActivity que creará un canal de notificación (si es necesario):Next, add a method to MainActivity that will create a notification channel (if necessary):

void CreateNotificationChannel()
{
    if (Build.VERSION.SdkInt < BuildVersionCodes.O)
    {
        // Notification channels are new in API 26 (and not a part of the
        // support library). There is no need to create a notification
        // channel on older versions of Android.
        return;
    }

    var name = Resources.GetString(Resource.String.channel_name);
    var description = GetString(Resource.String.channel_description);
    var channel = new NotificationChannel(CHANNEL_ID, name, NotificationImportance.Default)
                  {
                      Description = description
                  };

    var notificationManager = (NotificationManager) GetSystemService(NotificationService);
    notificationManager.CreateNotificationChannel(channel);
}

Actualice el método OnCreate para llamar a este nuevo método:Update the OnCreate method to call this new method:

protected override void OnCreate(Bundle bundle)
{
    base.OnCreate(bundle);
    SetContentView(Resource.Layout.Main);

    CreateNotificationChannel();
}

Definir el identificador de notificaciónDefine the notification ID

Se necesitará un identificador único para el canal de notificación y notificación.We will need a unique ID for our notification and notification channel. Vamos a editar MainActivity.CS y agregaremos la siguiente variable de instancia estática a la clase MainActivity:Let's edit MainActivity.cs and add the following static instance variable to the MainActivity class:

static readonly int NOTIFICATION_ID = 1000;
static readonly string CHANNEL_ID = "location_notification";
internal static readonly string COUNT_KEY = "count";

Agregar código para generar la notificaciónAdd code to generate the notification

A continuación, es necesario crear un nuevo controlador de eventos para el evento Click botón.Next, we need to create a new event handler for the button Click event. Agregue el método siguiente a MainActivity:Add the following method to MainActivity:

void ButtonOnClick(object sender, EventArgs eventArgs)
{
    // Pass the current button press count value to the next activity:
    var valuesForActivity = new Bundle();
    valuesForActivity.PutInt(COUNT_KEY, count);

    // When the user clicks the notification, SecondActivity will start up.
    var resultIntent = new Intent(this, typeof(SecondActivity));

    // Pass some values to SecondActivity:
    resultIntent.PutExtras(valuesForActivity);

    // Construct a back stack for cross-task navigation:
    var stackBuilder = TaskStackBuilder.Create(this);
    stackBuilder.AddParentStack(Class.FromType(typeof(SecondActivity)));
    stackBuilder.AddNextIntent(resultIntent);

    // Create the PendingIntent with the back stack:
    var resultPendingIntent = stackBuilder.GetPendingIntent(0, (int) PendingIntentFlags.UpdateCurrent);

    // Build the notification:
    var builder = new NotificationCompat.Builder(this, CHANNEL_ID)
                  .SetAutoCancel(true) // Dismiss the notification from the notification area when the user clicks on it
                  .SetContentIntent(resultPendingIntent) // Start up this activity when the user clicks the intent.
                  .SetContentTitle("Button Clicked") // Set the title
                  .SetNumber(count) // Display the count in the Content Info
                  .SetSmallIcon(Resource.Drawable.ic_stat_button_click) // This is the icon to display
                  .SetContentText($"The button has been clicked {count} times."); // the message to display.

    // Finally, publish the notification:
    var notificationManager = NotificationManagerCompat.From(this);
    notificationManager.Notify(NOTIFICATION_ID, builder.Build());

    // Increment the button press count:
    count++;
}

El método OnCreate de MainActivity debe hacer la llamada para crear el canal de notificación y asignar el método ButtonOnClick al evento Click del botón (Reemplace el controlador de eventos de delegado proporcionado por la plantilla):The OnCreate method of MainActivity must make the call to create the notification channel and assign the ButtonOnClick method to the Click event of the button (replace the delegate event handler provided by the template):

protected override void OnCreate(Bundle bundle)
{
    base.OnCreate(bundle);
    SetContentView(Resource.Layout.Main);

    CreateNotificationChannel();

    // Display the "Hello World, Click Me!" button and register its event handler:
    var button = FindViewById<Button>(Resource.Id.MyButton);
    button.Click += ButtonOnClick;
}

Crear una segunda actividadCreate a second activity

Ahora es necesario crear otra actividad que Android mostrará cuando el usuario haga clic en la notificación.Now we need to create another activity that Android will display when the user clicks our notification. Agregue otra actividad de Android al proyecto denominado SecondActivity.Add another Android Activity to your project called SecondActivity. Abra SecondActivity.CS y reemplace su contenido por este código:Open SecondActivity.cs and replace its contents with this code:

using System;
using Android.App;
using Android.OS;
using Android.Widget;

namespace LocalNotifications
{
    [Activity(Label = "Second Activity")]
    public class SecondActivity : Activity
    {
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            // Get the count value passed to us from MainActivity:
            var count = Intent.Extras.GetInt(MainActivity.COUNT_KEY, -1);

            // No count was passed? Then just return.
            if (count <= 0)
            {
                return;
            }

            // Display the count sent from the first activity:
            SetContentView(Resource.Layout.Second);
            var txtView = FindViewById<TextView>(Resource.Id.textView1);
            txtView.Text = $"You clicked the button {count} times in the previous activity.";
        }
    }
}

También debemos crear un diseño de recursos para SecondActivity.We must also create a resource layout for SecondActivity. Agregue un nuevo archivo de diseño de Android a su proyecto denominado Second. axml.Add a new Android Layout file to your project called Second.axml. Edite Second. axml y pegue el siguiente código de diseño:Edit Second.axml and paste in the following layout code:

<?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"
    android:minWidth="25px"
    android:minHeight="25px">
    <TextView
        android:text=""
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/textView1" />
</LinearLayout>

Icono Agregar un avisoAdd a notification icon

Por último, agregue un icono pequeño que aparecerá en el área de notificación cuando se inicie la notificación.Finally, add a small icon that will appear in the notification area when the notification is launched. Puede copiar este icono en el proyecto o crear su propio icono personalizado.You can copy this icon to your project or create your own custom icon. Asigne al botón el nombre archivo de icono ic_stat__haga clic en. png y cópielo en la carpeta Resources/drawable .Name the icon file ic_stat_button_click.png and copy it to the Resources/drawable folder. No olvide usar agregar > elemento existente... para incluir este archivo de icono en el proyecto.Remember to use Add > Existing Item ... to include this icon file in your project.

Ejecutar la aplicaciónRun the application

Compile y ejecute la aplicación.Build and run the application. Debería aparecer la primera actividad, similar a la siguiente captura de pantalla:You should be presented with the first activity, similar to the following screenshot:

captura de pantalla de la primera actividadFirst activity screenshot

Al hacer clic en el botón, debe observar que el icono pequeño de la notificación aparece en el área de notificación:As you click the button, you should notice that the small icon for the notification appears in the notification area:

aparece el icono de notificación deNotification icon appears

Si desliza el dedo hacia abajo y expone el cajón de notificaciones, debería ver la notificación:If you swipe down and expose the notification drawer, you should see the notification:

mensaje de notificaciónNotification message

Al hacer clic en la notificación, debe desaparecer y se debe iniciar nuestra otra actividad – que parezca algo parecido a la captura de pantalla siguiente:When you click the notification, it should disappear, and our other activity should be launched – looking somewhat like the following screenshot:

captura de pantalla desegunda actividadSecond activity screenshot

¡Enhorabuena!Congratulations! En este punto, ha completado el tutorial de notificaciones locales de Android y tiene un ejemplo en funcionamiento al que puede hacer referencia.At this point you have completed the Android local notification walkthrough and you have a working sample that you can refer to. Hay muchas más notificaciones que se han mostrado aquí, por lo que si desea más información, eche un vistazo a la documentación de Google sobre las notificaciones.There is a lot more to notifications than we have shown here, so if you want more information, take a look at Google's documentation on notifications.

ResumenSummary

En este tutorial se ha usado NotificationCompat.Builder para crear y Mostrar notificaciones.This walkthrough used NotificationCompat.Builder to create and display notifications. Mostraba un ejemplo básico de cómo iniciar una segunda actividad como una manera de responder a la interacción del usuario con la notificación y demostró la transferencia de datos de la primera actividad a la segunda actividad.It showed a basic example of how to start up a second Activity as a way to respond to user interaction with the notification, and it demonstrated the transfer of data from the first Activity to the second Activity.