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
-
- Quando seu app está em segundo plano, os callbacks registrados para
receber as saídas de
GnssMeasurement
eGnssNavigationMessage
deixam de ser executados.
- Quando seu app está em segundo plano, os callbacks registrados para
receber as saídas de
- 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 sendo executado em um dispositivo com o Google Play Services instalado, é altamente recomendável usar o provedor de localização combinada (FLP, na sigla em inglês).
-
- 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 classeWifiManager
fornecerá resultados em cache da verificação anterior.