Limites da localização em segundo plano

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

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

Esse comportamento de busca de localização é especialmente importante se o app depende de alertas em tempo real ou detecção de movimento durante a execução em segundo plano.

Comportamento do aplicativo em primeiro plano preservado

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

Aviso:se o app buscar atualizações de localização quase em tempo real por um longo período, a duração da bateria do dispositivo será significativamente menor.

Aprimorar o comportamento de localização do app

Considere se os casos de uso do seu app para execução em segundo plano não terão sucesso caso ele receba atualizações de localização com pouca frequência. Nesse caso, você pode recuperar atualizações de localização com mais frequência realizando uma das seguintes ações:

  • Levar o aplicativo a primeiro plano.
  • Inicie um serviço em primeiro plano no seu 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.

    Cuidado:se o app iniciar um serviço em primeiro plano durante a execução em segundo plano em um dispositivo com o Android 11 (API de nível 30) ou versões mais recentes, ele não vai poder acessar informações de localização, a menos que o usuário tenha concedido a permissão ACCESS_BACKGROUND_LOCATION. Para mais informações, consulte as orientações sobre as restrições de uso associadas aos serviços em primeiro plano.

  • Usar elementos da API Geofencing, como GeofencingClient, que é otimizado para minimizar o uso de energia.
  • Use um listener de localização passivo, que poderá receber atualizações de localização mais rápidas se houver apps em primeiro plano solicitando atualizações de localização com mais frequência.

Observação:se o app precisar de acesso ao 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 mais frequência do que a API sem lote. No entanto, lembre-se de que o app ainda recebe atualizações em lotes apenas algumas vezes por hora.

APIs afetadas

As mudanças no comportamento de busca de localização nos 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 calculará um novo local para o app apenas algumas vezes por hora. Isso acontece mesmo quando o app solicita atualizações de localização mais frequentes.

    No entanto, ao usar a versão em lote do FLP, você tem acesso a um Histórico de localização com maior frequência depois que o app recebe uma atualização em lote, o que também ocorre apenas algumas vezes por hora.

  • Se o app estiver em execução em primeiro plano, não há mudanças nas taxas de amostragem de localização em comparação com o Android 7.1.1 (API de nível 25).
Fronteira geográfica virtual
  • Apps em segundo plano podem receber eventos de transição de fronteira geográfica virtual com mais frequência do que as atualizações do provedor de localização combinada.
  • A capacidade de resposta média de um evento de fronteira geográfica virtual é a cada dois minutos.
Medidas e mensagens de navegação do GNSS
Location Manager
Wi-Fi Manager
O método startScan() realiza uma verificação 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 fornecerá resultados em cache da verificação anterior.