Share via


Configurar una geovalla (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 Geofence en tu aplicación.

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

Introducción

Para configurar una Geofence hay que seguir varios pasos. Además de definir la región de interés, también debes asegurarte de que tienes los permisos de ubicación adecuados. Por último, necesitas configurar un controlador de eventos por si el usuario cambia estos permisos mientras la aplicación se está ejecutando.

Comprobar que la ubicación esté habilitada

Antes de que la aplicación pueda tener acceso a la ubicación, la Ubicación debe estar habilitada en el dispositivo. En la aplicación Configuración, comprueba que la siguiente configuración de privacidad de ubicación esté activada:

  • La ubicación de este dispositivo... está activada (no es aplicable para Windows 10 Mobile)
  • La configuración de servicios de ubicación, "Ubicación", está activada
  • En Elegir las aplicaciones que pueden usar tu ubicación, la aplicación está establecida en activada

Habilitar la capacidad de ubicación

Haz doble clic en package.appxmanifest en el Explorador de soluciones y selecciona la pestaña Funcionalidades. A continuación, activa Ubicación en la lista Funcionalidades. De esta forma, se agrega la funcionalidad Location del dispositivo en el archivo de manifiesto del paquete.

  <Capabilities>
    <!-- DeviceCapability elements must follow Capability elements (if present) -->
    <DeviceCapability Name="location"/>
  </Capabilities>

Comprobar los permisos de ubicación

En primer lugar, es posible que quieras agregar código a tu aplicación durante la inicialización para obtener la ubicación. En Windows, la primera vez que tu aplicación use la API para obtener la ubicación actual, el sistema solicitará al usuario el permiso de ubicación. Si tu aplicación no tiene el permiso del usuario, le enviará una alerta. Ten en cuenta que puedes configurar una Geofence sin permisos de ubicación, pero no recibirás notificaciones hasta que los permisos estén habilitados.

    function initialize() {

        promise = geolocator.getGeopositionAsync();
        promise.done(
            function (pos) {
                var coord = pos.coordinate;

            },
            function (err) {
            // handle situations where location permissions are not granted to your app
            }
        );

    }


Escuchar cambios en los permisos de ubicación

A continuación, asegúrate de registrarte en eventos de cambio de permisos por si el usuario decide desactivar los permisos por algún motivo. Primero, agrega los controladores de eventos al método de inicialización:


var accessInfo = null;
accessInfo = DeviceAccessInformation.createFromDeviceClass(Enumeration.DeviceClass.location);
accessInfo.addEventListener("accesschanged", onAccessChanged);

Después, administra los cambios en los permisos para que el usuario sepa que las geovallas no funcionarán si los permisos están desactivados:

function onAccessChanged(args) {
    var eventDescription = getTimeStampedMessage("Device Access Status");
    var item = null;

    if (DeviceAccessStatus.deniedByUser === args.status) {
        eventDescription += " (DeniedByUser)";

        WinJS.log && WinJS.log("Location has been disabled by the user. Enable access through the settings charm.", "sample", "status");
    } else if (DeviceAccessStatus.deniedBySystem === args.status) {
        eventDescription += " (DeniedBySystem)";

        WinJS.log && WinJS.log("Location has been disabled by the system. The administrator of the device must enable location access through the location control panel.", "sample", "status");
    } else if (DeviceAccessStatus.unspecified === args.status) {
        eventDescription += " (Unspecified)";

        WinJS.log && WinJS.log("Location has been disabled by unspecified source. The administrator of the device may need to enable location access through the location control panel, then enable access through the settings charm.", "sample", "status");
    } else if (DeviceAccessStatus.allowed === args.status) {
        eventDescription += " (Allowed)";

        // clear status
        WinJS.log && WinJS.log("", "sample", "status");
    } else {
        eventDescription += " (Unknown)";

        WinJS.log && WinJS.log("Unknown device access information status", "sample", "status");
    }

    addEventDescription(eventDescription);
}

Nota  Puedes determinar si un usuario ha deshabilitado la ubicación en la configuración consultando la propiedad LocationStatus. Si el valor es Disabled, la ubicación estará deshabilitada.

 

Crear la geovalla

Ahora ya estás listo para definir y configurar una geovalla. Algunos de los valores que se pueden establecer para una geovalla son:

  • Un Id para identificarla.
  • La región circular de interés, definida por Geoshape.
  • Los MonitoredStates, que indican para qué eventos de geovalla quieres recibir notificaciones: entrar en la región definida, salir de la región definida o eliminar la geovalla.
  • Una marca SingleUse, que eliminará la geovalla cuando se hayan alcanzado todos los estados de la geovalla que se está supervisando.
  • DwellTime, que indica cuánto tiempo debe estar el usuario fuera o dentro del área definida antes de generar eventos de entrada o salida.
  • StartTime, que indica cuándo comenzar a supervisar la geovalla.
  • Duration, que establece el tiempo durante el cual se supervisará la geovalla.

function generateGeofence() {
    var geofence = null;

    try {
        var fenceKey = nameElement.value;

        var position = {
            latitude: decimalFormatter.parseDouble(latitude.value),
            longitude: decimalFormatter.parseDouble(longitude.value),
            altitude: 0
        };
        var radiusValue = decimalFormatter.parseDouble(radius.value);

        // the geofence is a circular region
        var geocircle = new Windows.Devices.Geolocation.Geocircle(position, radiusValue);

        var singleUse = false;

        if (geofenceSingleUse.checked) {
            singleUse = true;
        }

        // want to listen for enter geofence, exit geofence and remove geofence events
        var mask = 0;

        mask = mask | Windows.Devices.Geolocation.Geofencing.MonitoredGeofenceStates.entered;
        mask = mask | Windows.Devices.Geolocation.Geofencing.MonitoredGeofenceStates.exited;
        mask = mask | Windows.Devices.Geolocation.Geofencing.MonitoredGeofenceStates.removed;

        var dwellTimeSpan = new Number(parseTimeSpan(dwellTimeField, defaultDwellTimeSeconds));
        var durationTimeSpan = null;
        if (durationField.value.length) {
            durationTimeSpan = new Number(parseTimeSpan(durationField, 0));
        } else {
            durationTimeSpan = new Number(0); // duration needs to be set since start time is set below
        }
        var startDateTime = null;
        if (startTimeField.value.length) {
            startDateTime = new Date(startTimeField.value);
        } else {
            startDateTime = new Date(); // if you don't set start time in JavaScript the start time defaults to 1/1/1601
        }

        geofence = new Windows.Devices.Geolocation.Geofencing.Geofence(fenceKey, geocircle, mask, singleUse, dwellTimeSpan, startDateTime, durationTimeSpan);
    } catch (ex) {
        WinJS.log && WinJS.log(ex.toString(), "sample", "error");
    }

    return geofence;
}

Temas relacionados

Guías básicas

Guía básica para aplicaciones con JavaScript

Diseño de la experiencia del usuario para aplicaciones

Tareas

Controlar notificaciones de geovallas en primer plano

Escuchar eventos de geovallas en segundo 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