Limites da localização em segundo plano

Em uma tentativa de reduzir o consumo de energia, o Android 8.0 (nível 26 da API) limita a frequência com que um app pode recuperar a localização atual do usuário enquanto ele está em execução em segundo plano. Nessas condições, os apps só podem receber atualizações de local algumas vezes por hora.

Observação : essas limitações se aplicam a todos os apps usados em dispositivos que executam o Android 8.0 (nível 26 da API) ou versões mais recentes, independentemente da versão do SDK de destino do app.

Esse comportamento de busca de localização é muito importante se o app usa alertas em tempo real ou detecção de movimentos enquanto é executado em segundo plano.

Comportamento do aplicativo em primeiro plano preservado

Se um app estiver em primeiro plano em um dispositivo que executa o Android 8.0 (nível 26 da API), o comportamento de atualização do local será o mesmo do Android 7.1.1 (nível 25 da API) e versões anteriores.

Aviso:se o app buscar atualizações de localização quase em tempo real por muito tempo, a duração da bateria do dispositivo poderá ser significativamente diminuída.

Aprimorar o comportamento de localização do app

Analise se é possível que os casos de uso do seu app quando executado em segundo plano funcionem bem se o app receber atualizações de localização com menos frequência. Se esse for o caso, você pode buscar atualizações de localização mais frequentemente realizando uma das seguintes ações:

  • Levar o aplicativo a primeiro plano.
  • Inicie um serviço em primeiro plano no app chamando startForegroundService(). Quando um serviço em primeiro plano está ativo, ele aparece como uma notificação contínua na área de notificação.

    Atenção:se o app iniciar um serviço em primeiro plano enquanto estiver em segundo plano em um dispositivo com o Android 11 (nível 30 da API) ou mais recente, ele não poderá acessar as informações de local, a menos que o usuário tenha concedido a permissão ACCESS_BACKGROUND_LOCATION ao app. Para mais informações, consulte as orientações sobre as restrições de uso associadas aos serviços em primeiro plano.

  • Use elementos da API Geofencing, como GeofencingClient, que é otimizado para minimizar o uso de bateria.
  • Use um listener passivo de localização, que pode receber atualizações de local mais rapidamente se houver apps em primeiro plano solicitando a localização com maior frequência.

Observação:se o app precisar acessar o Histórico de localização que contém atualizações frequentes, use a versão em lote dos elementos da API Fused Location Provider, como a interface FusedLocationProviderApi. Quando o app está sendo executado em segundo plano, essa API recebe a localização do usuário com maior frequência do que a API sem lote. No entanto, seu app ainda recebe atualizações em lote apenas algumas vezes por hora.

APIs afetadas

As mudanças no comportamento de busca de localização dos apps em segundo plano afetam as seguintes APIs:

Provedor de localização combinada (FLP)
  • Se o app estiver sendo executado em segundo plano, o serviço do sistema de localização vai computar um novo local para ele apenas algumas vezes por hora. Isso acontece mesmo quando o app está solicitando atualizações de local mais frequentes.

    No entanto, ao usar a versão em lote do FLP, você tem acesso a um Histórico de localização mais frequente após o app receber uma atualização em lote, o que também ocorre apenas algumas vezes por hora.

  • Não há nenhuma mudança nas taxas de amostragem de localização em relação ao Android 7.1.1 (API de nível 25) caso o app esteja em primeiro plano.
Geofencing
  • Os apps em segundo plano podem receber eventos de transição de fronteira geográfica virtual com maior frequência do que as atualizações do Fused Location Provider.
  • A capacidade de resposta média de um evento de fronteira geográfica virtual é de por volta de dois minutos.
Medidas e mensagens de navegação do GNSS
Location Manager
  • As atualizações de localização são fornecidas aos apps em segundo plano apenas algumas vezes por hora.

    Observação:se o app estiver em execução em um dispositivo com o Google Play Services instalado, é altamente recomendável usar o Fused Location Provider (FLP).

Wi-Fi Manager
O método startScan() realiza uma varredura completa em busca de apps em segundo plano apenas algumas vezes por hora. Se um app em segundo plano chamar o método novamente pouco tempo depois, a classe WifiManager vai fornecer resultados em cache da verificação anterior.