Escuchar eventos de geovallas en segundo plano (HTML)

[ Este artículo está destinado a desarrolladores de Windows 8.x y Windows Phone 8.x que escriben aplicaciones de Windows en tiempo de ejecución. Si estás desarrollando para Windows 10, consulta la documentación más reciente

En este tema se describen los pasos para configurar una tarea en segundo plano para que escuche notificaciones Geofence en tu aplicación.

Guía básica: Relación de este tema con los demás. Consulta:

Introducción

Una vez creadas las geovallas, tendrás que agregar la lógica para administrar lo que sucede cuando se produce un evento de geovalla. En función de los MonitoredStates que hayas configurado, podrías recibir un evento cuando:

  • El usuario ha entrado en una región de interés.
  • El usuario ha salido de una región de interés.
  • La geovalla ha expirado o ha sido eliminada. Ten en cuenta que una aplicación en segundo plano no se activa en caso de evento de eliminación.

En este tema se describe cómo configurar una tarea en segundo plano para alertar a tu aplicación siempre que se produzca un evento de geovalla. También puedes controlar los eventos directamente desde tu aplicación cuando se está ejecutando. Para obtener más información, consulta Administrar notificaciones de geovallas en primer plano y Directrices para geovallas.

Escuchar un evento de geovalla en segundo plano requiere varios pasos:

  • Declarar la tarea en segundo plano en el manifiesto de la aplicación
  • Registrar la tarea en segundo plano en tu aplicación Si tu aplicación necesita acceso a Internet, por ejemplo, para acceder a un servicio de nube, puedes establecer una marca para ello cuando se genere el evento. También puedes establecer una marca para asegurarte de que el usuario está presente cuando el evento se desencadene con el fin de garantizar que el usuario recibirá la notificación.
  • Mientras tu aplicación se ejecuta en primer plano, pide al usuario que conceda permisos de ubicación a tu aplicación.

Registrarse para eventos de cambio de estado de geovalla

En el manifiesto de la aplicación, en la pestaña Declaraciones, agrega una declaración para una tarea de ubicación en segundo plano. Para ello haz lo siguiente:

  • Agrega una declaración del tipo Tareas en segundo plano.
  • Establece una propiedad de tipo de tarea Ubicación.
  • Establece un punto de entrada en tu aplicación al que se llamará cuando se genere el evento.

Registrar la tarea en segundo plano

El siguiente código registra la tarea de geovalla en segundo plano: Recuerda que cuando se creó la geovalla, comprobamos los permisos de ubicación. Consulta Configurar una geovalla para obtener más información.

function registerBackgroundTask() {
    try {
        // Request lockscreen access
        Background.BackgroundExecutionManager.requestAccessAsync().done(
            function (backgroundAccessStatus) {
                var builder =  new Windows.ApplicationModel.Background.BackgroundTaskBuilder();

                // Register the background task
                builder.name = sampleBackgroundTaskName;
                builder.taskEntryPoint = sampleBackgroundTaskEntryPoint;
                builder.setTrigger(new Windows.ApplicationModel.Background.LocationTrigger(Windows.ApplicationModel.Background.LocationTriggerType.geofence));

                // If it is important that there is user presence and/or
                // internet connection when OnCompleted is called
                // the following could be called before calling Register()
                // var condition = new SystemCondition(SystemConditionType.userPresent | SystemConditionType.internetAvailable);
                // builder.addCondition(condition);

                geofenceTask = builder.register();

                geofenceTask.addEventListener("completed", onCompleted);

                LocationTriggerBackgroundTask.updateButtonStates(/*registered:*/ true);

                switch (backgroundAccessStatus) {
                    case Background.BackgroundAccessStatus.unspecified:
                    case Background.BackgroundAccessStatus.denied:
                        WinJS.log && WinJS.log("This app is not allowed to run in the background.", "sample", "status");
                        break;

                    default:
                        // Finish by getting an initial position. This will present the location consent
                        // dialog if it's the first attempt for this application to access location.
                        getGeopositionAsync();
                        break;
                }
            },
            function (e) {
                // Did you forget to do the background task declaration in the package manifest?
                WinJS.log && WinJS.log(e.toString(), "sample", "error");
            }
        );
    } catch (ex) {
        // HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED) === -2147024846

        if (ex.number === -2147024846) {
            WinJS.log && WinJS.log("Location Simulator not supported.  Could not get permission to add application to the lock screen, this application must be added to the lock screen before the background task will run.", "sample", "status");
        } else {
            WinJS.log && WinJS.log(ex.toString(), "sample", "error");
        }
    }
}

Temas relacionados

Guías básicas

Guía básica para aplicaciones con JavaScript

Diseño de la experiencia del usuario para aplicaciones

Tareas

Configurar una geovalla

Controlar notificaciones de geovallas en primer plano

Administrar notificaciones de geovallas en una tarea en segundo plano

Referencia

Geoshape

Geofence

Geolocator

Otros recursos

Muestra de geolocalización de Windows 10

Muestra de geolocalización de Windows 8.1

Directrices para geovallas