5 votes

Pourquoi le PlacePicker Android ne nécessite pas (!) l'autorisation ACCESS_FINE_LOCATION pour fonctionner?

Le PlacePicker est un widget utile ajouté dans com.google.android.gms:play-services-places:9.4.0. Trouvez la description ici: PlacePicker

La documentation indique clairement que vous avez besoin de l'autorisation ACCESS_FINE_LOCATION pour qu'il fonctionne.

Sous Marshmallow et supérieur, vous devez également demander à l'utilisateur d'accorder cette autorisation.
Mais il semble fonctionner sans rien faire de tout cela!
Mon application le fait

  • fournir une clé API de cartes
  • ne pas définir l'autorisation dans le AndroidManifest
  • ne pas demander à l'utilisateur d'accorder cette autorisation à aucun moment

Mais en exécutant l'application sur un appareil Marshmallow, le PlacePicker se lance et je peux

  • sélectionner correctement un endroit (impossible sans clé API).
  • aller à "Ma position" via le bouton Ma Position (possible sans clé API)

Est-ce que quelqu'un peut confirmer cela ou a une explication pourquoi ce widget fonctionne sans autorisations appropriées accordées?

1voto

Ricardo BRGWeb Points 615

La question a presque un an mais je cherchais à trouver la même réponse pour aider quelqu'un d'autre.

C'est parce que PlacePicker fonctionne avec une "demande basée sur l'intention". La documentation n'est pas très claire à ce sujet, mais elle dit

1: Utilisez uniquement les autorisations nécessaires au bon fonctionnement de votre application. Selon la manière dont vous utilisez les autorisations, il peut y avoir une autre façon de faire ce dont vous avez besoin (intentions système, identifiants, mise en arrière-plan pour les appels téléphoniques) sans avoir à accéder à des informations sensibles. Source

Et donnez quelques indices ici:

Si votre besoin d'accès aux données de l'utilisateur est peu fréquent - en d'autres termes, il n'est pas inacceptablement perturbant pour l'utilisateur de se voir présenter un dialogue d'exécution à chaque fois que vous avez besoin d'accéder aux données - vous pouvez utiliser une demande basée sur l'intention. Android propose certaines intentions système que les applications peuvent utiliser sans nécessiter d'autorisations car l'utilisateur choisit ce qu'il veut partager avec l'application au moment où la demande basée sur l'intention est émise. Source

J'ai compris en testant des cas d'utilisation des autorisations avec des appareils Marshmallow et Lollipop, en comparant les résultats avec PlacePicker que je pensais pouvait utiliser des autorisations basées sur l'intention avec MediaStore qui utilise ce type d'autorisation selon la documentation:

Par exemple, un type d'action d'intention comme MediaStore.ACTION_IMAGE_CAPTURE ou MediaStore.ACTION_VIDEO_CAPTURE peut être utilisé pour capturer des images ou des vidéos sans utiliser directement l'objet Camera (ou nécessitant l'autorisation). Dans ce cas, l'intention système demandera l'autorisation de l'utilisateur en votre nom chaque fois qu'une image est capturée. Par exemple, un type d'action d'intention comme MediaStore.ACTION_IMAGE_CAPTURE ou MediaStore.ACTION_VIDEO_CAPTURE peut être utilisé pour capturer des images ou des vidéos sans utiliser directement l'objet Camera (ou nécessitant l'autorisation). Dans ce cas, l'intention système demandera l'autorisation de l'utilisateur en votre nom chaque fois qu'une image est capturée. Source

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X