Esta página explica as práticas recomendadas para solicitar e gerenciar permissões de uso de 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
ACCESS_BACKGROUND_LOCATION permissão 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 outras finalidades), já que a mesclagem 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 permissões de localização "Permitir o tempo todo" dos 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.
O aviso precisa explicar aos usuários como conceder a permissão vai melhorar a precisão da localização e a experiência de navegação quando o app estiver em execução em segundo plano.
Para mais informações sobre como solicitar 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 revisão dos dados:
- Depois de invocar
startGuidance(), invoquestopGuidance()ouclearDestination(). - Depois de registrar
ArrivalListener, cancele o registro. - Depois de registrar
RoadSnappedLocationProvider, cancele o registro.
Concluir essas etapas garante que as notificações não sejam mantidas ativas quando não forem mais necessárias, o que pode levar a consumo de bateria e possíveis vazamentos de memória.
Ao invocar novamente os métodos NavigationApi#initForegroundServiceManager, invoque 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 mitigar 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 o app continue tendo acesso aos dados de localização mais precisos.
Como as mudanças no Android 14 afetam o SDK 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 a localização do usuário para atualizar a rota e mostrar a orientação visual e de áudio correta. A partir do Android 14, o acesso à localização exata do usuário em segundo plano exige 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 essa 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. Dessa forma, o app não precisa declarar a permissão, já que a mesclagem do Gradle vai cuidar disso. No entanto, se uma notificação não for mostrada ao usuário antes que o app seja colocado em segundo plano, o SDK Navigation vai depender do sistema para fornecer atualizações de localização. 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 da localização para navegação
Você pode melhorar a precisão do sinal de localização usado pelo SDK Navigation atualizando o app para solicitar aos usuários o acesso à localização em segundo plano. Para mais informações, consulte Solicitar permissões de localização "Permitir o tempo todo" permissões.