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.
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()
, invoquestopGuidance()
ouclearDestination()
. - 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".