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 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 mais recente, independente da versão do SDK de destino do app.

Esse comportamento de busca de localização é particularmente 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 da localização será o mesmo do Android 7.1.1 (nível 25 da API) e versões anteriores.

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

Aprimorar o comportamento de localização do app

Considere se os casos de uso do app para execução em segundo plano não têm êxito se o app receber atualizações de localização com pouca frequência. Se esse for o caso, você poderá 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.

    Atenção:se o app iniciar um serviço em primeiro plano durante a execução em segundo plano em um dispositivo com o Android 11 (nível 30 da API) ou versões mais recentes, ele não poderá acessar informações de localização, 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 energia.
  • Use um listener de localização passivo, que poderá receber atualizações de localização mais rapidamente se houver apps em primeiro plano solicitando atualizações de localização com mais rapidez.

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 seu 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 em 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 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 depois que o app recebe uma atualização em lote, o que também ocorre apenas algumas vezes por hora.

  • Se o app estiver sendo executado em primeiro plano, não haverá mudança 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
  • Os 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 é de aproximadamente dois minutos.
Medidas e mensagens de navegação do GNSS
Location Manager
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 fornecerá resultados em cache da verificação anterior.