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.