Escutar eventos de cerca geográfica em segundo plano (HTML)

[ Este artigo destina-se aos desenvolvedores do Windows 8.x e do Windows Phone 8.x que escrevem aplicativos do Windows Runtime. Se você estiver desenvolvendo para o Windows 10, consulte documentação mais recente]

Este tópico guia você pelas etapas de configuração de uma tarefa em segundo plano para escutar notificações de Geofence em seu aplicativo.

Mapa: como este tópico está relacionado aos outros? Veja:

Introdução

Após a criação das cercas geográficas, você tem que adicionar a lógica para agir quando ocorrer um evento de cerca geográfica. Dependendo dos MonitoredStates configurados, você pode receber um evento quando:

  • O usuário entrar em uma região de interesse.
  • O usuário sair de uma região de interesse.
  • A cerca geográfica expirar ou for removida. Observe que um aplicativo em segundo plano não é ativado para um evento de remoção.

Este tópico descreve como configurar uma tarefa em segundo plano para alertar seu aplicativo quando ocorrer um evento de cerca geográfica. Mas você também pode manipular eventos diretamente de seu aplicativo quando ele está em execução. Para saber mais, veja Manipular notificações de cerca geográfica em primeiro plano e Diretrizes para cerca geográfica.

Para escutar um evento de cerca geográfica em segundo plano são necessárias algumas etapas:

  • Declarando a tarefa em segundo plano no manifesto do aplicativo
  • Registre a tarefa em segundo plano no aplicativo. Quando o aplicativo precisar de acesso à Internet, como para acessar um serviço de nuvem, você pode definir um sinalizador para quando o evento for disparado. Você também pode definir um sinalizador para verificar se o usuário está presente quando o evento é disparado, para assegurar que ele receba a notificação.
  • Enquanto seu aplicativo estiver sendo executado em primeiro plano, peça ao usuário para conceder permissões de localização ao aplicativo.

Registrar eventos de alteração de estado de cerca geográfica

No manifesto do aplicativo, na guia Declarações, adicione uma declaração para uma tarefa em segundo plano de localização. Para isso:

  • Adicione uma declaração do tipo Tarefas em Segundo Plano.
  • Defina um tipo de tarefa de propriedade de Localização.
  • Defina um ponto de entrada em seu aplicativo para chamar quando um evento for disparado.

Registrar a tarefa em segundo plano

O código a seguir registra a tarefa em segundo plano de cerca geográfica. Lembre-se de que, quando a cerca geográfica foi criada, nós verificamos as permissões de localização. Para saber mais, veja Configurar uma cerca geográfica.

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

Tópicos relacionados

Mapas

Mapa de aplicativos que usam JavaScript

Desenvolvendo a experiência do usuário para aplicativos

Tarefas

Configurar uma cerca geográfica

Manipular notificações de cerca geográfica em primeiro plano

Manipular notificações de cerca geográfica de uma tarefa em segundo plano

Referência

Geoshape

Geofence

Geolocator

Outros recursos

Exemplo de geolocalização do Windows 10

Exemplo de geolocalização do Windows 8.1

Diretrizes para cercas geográficas