Práticas recomendadas de uso da localização em segundo plano

Esta página explica as práticas recomendadas para solicitar e gerenciar permissões de uso de local em segundo plano.

Solicitar a permissão de localização "Permitir o tempo todo"

A partir do Android 14, os apps precisam ter a permissão ACCESS_BACKGROUND_LOCATION para acessar a localização do usuário. O SDK Navigation inclui essa permissão no arquivo de manifesto. Portanto, não é preciso solicitá-la explicitamente (se não for necessária para outros fins), já que a fusão do manifesto do Gradle vai garantir que ela seja mesclada com o manifesto do app.

No entanto, ter a permissão ACCESS_BACKGROUND_LOCATION não é suficiente para acessar a localização em segundo plano. Recomendamos que você solicite aos usuários a permissão de localização "Permitir o tempo todo". Isso garante que o app possa ser executado em segundo plano e mostrar notificações, o que maximiza a precisão da localização durante a navegação.

A solicitação precisa explicar aos usuários como conceder a permissão vai melhorar a precisão de localização e a experiência de navegação quando o app estiver em execução em segundo plano.

exemplo de caixa de diálogo de
permissão

Para mais informações sobre como solicitar o acesso à localização dos usuários, consulte Solicitar permissões de localização | Sensores e localização | Desenvolvedores Android na documentação para desenvolvedores Android.

Garantir a limpeza adequada das notificações de navegação

Para garantir que o app não mantenha as notificações ativas depois que elas não forem mais necessárias, siga estas etapas de limpeza:

  • Depois de invocar startGuidance(), invoque stopGuidance() ou clearDestination().
  • Depois de registrar ArrivalListener, cancele o registro.
  • Depois de registrar RoadSnappedLocationProvider, cancele o registro.

Ao concluir essas etapas, você garante que as notificações não sejam mantidas quando não forem mais necessárias, o que pode levar ao esgotamento da bateria e possíveis vazamentos de memória.

Ao invocar novamente os métodos NavigationApi#initForegroundServiceManager, invoque primeiro NavigationApi#clearForegroundServiceManager.

Se o app estiver usando o ForegroundServiceManager, invoque NavigationApi#clearForegroundServiceManager antes de invocar NavigationApi#initForegroundServiceManagerProvider. Se você já inicializar o ForegroundServiceManager, invoque NavigationApi#initForegroundServiceManagerMessageAndIntent. Isso pode ser feito para atualizar o ID ou o conteúdo da notificação depois de inicializar o gerenciador de serviços em primeiro plano.

Sobre as novas restrições introduzidas no Android 14

O Android 14 (Android U) introduziu novas restrições para apps que acessam a localização do usuário em segundo plano. Para ajudar a reduzir essas mudanças, o SDK de navegação foi atualizado na versão 5.4.0 para gerenciar melhor o acesso à localização em segundo plano. Também recomendamos que você atualize sua implementação para garantir que o app continue tendo acesso aos dados de local mais precisos.

Como as mudanças no Android 14 afetam o SDK do Navigation

Quando você invoca startGuidance() no app, o serviço em primeiro plano começa a mostrar notificações do usuário para a navegação passo a passo. A navegação guiada depende da capacidade de acessar a localização do usuário para atualizar a rota e mostrar a orientação visual e auditiva correta. A partir do Android 14, o acesso ao local exato do usuário em segundo plano requer permissão do usuário. Por padrão, se um app não tiver a permissão do usuário para acesso à localização em segundo plano e tentar iniciar um serviço em primeiro plano para atualizações de localização, o sistema vai gerar uma SecurityException, fazendo com que o app falhe.

Como o SDK Navigation mitiga esse problema

A partir da versão 5.4.0, o SDK Navigation processa esse SecurityException sem afetar o app, permitindo que a navegação continue sendo executada em segundo plano. Além disso, o SDK de navegação inclui a permissão ACCESS_BACKGROUND_LOCATION no AndroidManifest. Dessa forma, o app não precisa declarar a permissão, já que a mesclagem do Gradle vai cuidar dela. No entanto, se uma notificação não for mostrada ao usuário antes que o app entre em segundo plano, o SDK de navegação vai depender do sistema para fornecer atualizações de local. Essas atualizações do sistema podem não ser frequentes ou precisas e resultar em uma experiência de navegação subótima. Por esse motivo, recomendamos que você também solicite aos usuários o acesso à localização em segundo plano.

O que os desenvolvedores de apps podem fazer para melhorar a precisão de local para navegação

É possível melhorar a precisão do indicador de local usado pelo SDK de navegação atualizado seu app para solicitar o acesso à localização em segundo plano. Para mais informações, consulte Solicitar permissões de localização "Permitir o tempo todo".