Esta página explica as práticas recomendadas para solicitar e gerenciar permissões de uso de local em segundo plano.
Solicitar permissões de localização "Permitir o tempo todo"
No Android 14 e versões mais recentes, 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 a permissão de localização "Permitir o
tempo todo" aos usuários. 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 melhora a precisão do local e melhora a experiência de navegação quando o app está em execução em segundo plano.
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()
, invoquestopGuidance()
ouclearDestination()
. - Depois de registrar
ArrivalListener
, cancele o registro. - Depois de registrar
RoadSnappedLocationProvider
, cancele a inscrição.
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 reduzir essas mudanças, o SDK do 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 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 guiada. A navegação guiada depende da capacidade de
acessar o local 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 preciso
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 do Navigation reduz esse problema
A partir da versão 5.4.0, o SDK do Navigation processa essa 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 em si, já que a mesclagem do Gradle vai lidar
com ela. 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 abaixo do ideal. 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 na 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".