Otimizar o uso de local para cenários reais

Esta seção descreve alguns cenários de coleta de localização típicos e recomendações para otimizar o uso das APIs do provedor de localização misto e da fronteira geográfica virtual.

Atualizações visíveis ao usuário ou em primeiro plano

Exemplo: um app de mapeamento que precisa de atualizações frequentes e precisas com latência muito baixa. Todas as atualizações acontecem em primeiro plano: o usuário inicia uma atividade, consome os dados de local e, após um curto período, interrompe a atividade.

Use o método setPriority() com um valor de PRIORITY_HIGH_ACCURACY ou PRIORITY_BALANCED_POWER_ACCURACY.

O intervalo especificado no método setInterval() depende do caso de uso: para cenários em tempo real, defina o valor de alguns segundos. Caso contrário, limite a alguns minutos. O recomendado para minimizar o uso da bateria é de aproximadamente dois minutos ou mais.

Saber a localização do dispositivo

Exemplo: um app de clima quer saber a localização do dispositivo.

Use o método getLastLocation(), que retorna a localização disponível mais recentemente, que pode ser nula em casos raros. Esse método fornece uma maneira simples de acessar a localização sem incorrer em custos associados às solicitações de atualizações de local. Use em conjunto com o método isLocationAvailable(), que retorna true quando a localização retornada por getLastLocation() está razoavelmente atualizada.

Iniciar atualizações quando um usuário está em uma localização específica

Exemplo: solicitar atualizações quando um usuário estiver a uma determinada distância do trabalho, da casa ou de outro local.

Use a fronteira geográfica virtual em conjunto com as atualizações do provedor de localização combinada. Solicite as atualizações quando o app receber um acionador de entrada da fronteira geográfica virtual e remova as atualizações quando o app receber um acionador de saída desse tipo de fronteira. Isso garante que o app receba atualizações de localização mais granulares somente quando o usuário tiver entrado em uma área definida.

O fluxo de trabalho típico para esse cenário pode envolver o surgimento de uma notificação na transição de entrada da fronteira geográfica virtual e o início de uma atividade que contém código para solicitar atualizações quando o usuário tocar na notificação.

Iniciar atualizações com base no estado da atividade do usuário

Exemplo: solicitar atualizações somente quando o usuário estiver dirigindo ou pedalando.

Use a API Activity Recognition em conjunto com as atualizações do provedor de localização combinada. Solicite atualizações quando a atividade direcionada for detectada e remova as atualizações quando o usuário parar de executar essa atividade.

O fluxo de trabalho típico para esse caso de uso pode envolver o surgimento de uma notificação para a atividade detectada e o início de uma atividade que contém código para solicitar atualizações quando o usuário tocar na notificação.

Atualizações de localização em segundo plano de longa duração vinculadas a áreas geográficas

Exemplo: o usuário quer ser notificado quando o dispositivo estiver próximo de um varejista.

Esse é um excelente caso de uso para a fronteira geográfica virtual. Como esse caso certamente envolve localização em segundo plano, use o método addGeofences(GeofencingRequest, PendingIntent).

Defina as opções de configuração a seguir:

  • Se estiver acompanhando transições de permanência, use o método setLoiteringDelay() transmitindo um valor de cinco minutos ou menos.

  • Use setNotificationResponsiveness(), transmitindo um valor de aproximadamente cinco minutos. No entanto, considere usar um valor de cerca de dez minutos se o app puder gerenciar o atraso extra na responsividade.

Um app só pode registrar no máximo 100 fronteiras geográficas virtuais. Em um caso de uso em que um app quer acompanhar uma grande quantidade de opções de varejistas, pode ser necessário que ele registre uma ampla fronteira geográfica virtual (no nível da cidade). Além disso, ele precisará registrar dinamicamente fronteiras menores (para locais na cidade) para lojas dentro da fronteira maior. Quando um usuário entra em uma fronteira geográfica virtual grande, adicione fronteiras menores. Quando o usuário sai da fronteira maior, remova as fronteiras menores e registre-as novamente para uma nova área.

Atualizações de localização em segundo plano de longa duração sem um componente do app visível

Exemplo: um app que rastreia passivamente a localização

Se possível, use o método setPriority() com a opção PRIORITY_NO_POWER, porque isso não gera praticamente nenhum consumo de bateria. Caso o uso de PRIORITY_NO_POWER não seja possível, use PRIORITY_BALANCED_POWER_ACCURACY ou PRIORITY_LOW_POWER, mas evite usar PRIORITY_HIGH_ACCURACY para trabalho em segundo plano prolongado, uma vez que essa opção consome substancialmente a bateria.

Se precisar de mais dados de local, use a localização passiva, chamando o método setFastestInterval() transmitindo um valor menor do que o transmitido para setInterval(). A localização passiva, combinada com a opção PRIORITY_NO_POWER, pode entregar de maneira oportuna a localização calculada por outros apps sem custo extra.

Modere a frequência adicionando alguma latência. Para isso, use o método setMaxWaitTime(). Por exemplo, se você usar o método setinterval() com um valor de aproximadamente 10 minutos, considere chamar setMaxWaitTime() com um valor entre 30 e 60 minutos. Ao usar essas opções, a localização é calculada para seu app aproximadamente a cada 10 minutos, mas o app só é ativado a cada 30 a 60 minutos com alguns dados de local disponíveis como uma atualização em lote. Essa abordagem troca a latência por mais dados disponíveis e melhor desempenho da bateria.

Atualizações frequentes de alta precisão enquanto o usuário interage com outros apps

Exemplo: um app de navegação ou fitness que continua funcionando quando o usuário desliga a tela ou abre um app diferente.

Use um serviço em primeiro plano. Se houver a possibilidade de um trabalho caro ser feito pelo seu app em nome do usuário, é uma prática recomendada informá-lo sobre esse trabalho. Um serviço em primeiro plano requer uma notificação persistente. Para mais informações, consulte Visão geral das notificações.