Idioma: HTML | XAML

Inicio rápido: configurar una geovalla (HTML)

Applies to Windows and Windows Phone

En este tema se describen los pasos para configurar una Geofence en una aplicación de Windows en tiempo de ejecución con JavaScript.

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 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

  • Applies to Windows

Nota  Esta sección se aplica únicamente a Windows.

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);
}



  • Applies to Windows Phone

Nota  Ten en cuenta que, en Windows Phone, podrás saber 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 crear aplicaciones de Windows en tiempo de ejecución con JavaScript
Diseño de la experiencia del usuario para aplicaciones
Tareas
Inicio rápido: Administrar notificaciones de geovallas en primer plano
Inicio rápido: Escuchar eventos de geovallas en segundo plano
Inicio rápido: Administrar notificaciones de geovallas en una tarea en segundo plano
Referencia
Geoshape
Geofence
Geolocator
Otros recursos
Directrices para geovallas

 

 

Mostrar:
© 2014 Microsoft