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

Nesta página, explicamos as práticas recomendadas para solicitar e gerenciar permissões de uso da localização em segundo plano.

Solicitar permissões 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 é necessário solicitá-la explicitamente (se não for necessária para outros fins), já que o mesclador de manifesto do Gradle garante 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 sempre". 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 a concessão da permissão vai melhorar a precisão da localização e a experiência de navegação quando o app estiver em segundo plano.

exemplo de caixa de diálogo de permissão

Para mais informações sobre como pedir 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 ativas quando não forem mais necessárias, o que pode causar consumo excessivo da bateria e possíveis vazamentos de memória.

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

Se o app estiver usando o ForegroundServiceManager, invoque NavigationApi#clearForegroundServiceManager antes de invocar NavigationApi#initForegroundServiceManagerProvider. Se você já tiver inicializado o ForegroundServiceManager, invoque NavigationApi#initForegroundServiceManagerMessageAndIntent. Você pode fazer isso 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 Navigation 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 seu 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 de usuário para navegação curva a curva. A navegação guiada depende do acesso à localização do usuário para atualizar o trajeto e mostrar a orientação visual e de áudio correta. A partir do Android 14, o acesso à localização precisa do usuário em segundo plano requer permissão dele. 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 um SecurityException, causando a falha do app.

Como o SDK do Navigation mitiga esse problema

A partir da versão 5.4.0, o SDK Navigation lida com esse SecurityException sem afetar o app, permitindo que a navegação continue sendo executada em segundo plano. Além disso, o SDK Navigation inclui a permissão ACCESS_BACKGROUND_LOCATION no AndroidManifest. Assim, seu app não precisa declarar a permissão, já que a fusão do Gradle vai cuidar disso. No entanto, se uma notificação não for exibida ao usuário antes de o app ir para segundo plano, o SDK Navigation vai depender do sistema para fornecer atualizações de local. Essas atualizações podem não ser frequentes ou precisas, resultando em uma experiência de navegação ruim. Por isso, recomendamos que você também peça aos usuários acesso à localização em segundo plano.

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

Você pode melhorar a precisão do indicador de local usado pelo SDK Navigation atualizando o app para pedir aos usuários acesso à localização em segundo plano. Para mais informações, consulte Solicitar permissões de localização "Permitir o tempo todo".