41 votes

Quand ai-je besoin d'android.hardware.location.gps et android.hardware.location.network?

Google est informé par courriel des modifications apportées à l'Android autorisations de position:

Nous faisons un changement, sur octobre 15, 2016 qui aura d'impact sur les applications le ciblage de la version de l'API 21 (Android 5.0, Lollipop) est supérieur ou égal à utiliser ACCESS_FINE_LOCATION mais ne sont pas explicitement l' "android.matériel.emplacement.gps" uses-feature. À l'avenir, ces applications seront disponibles à installer sur les appareils qui n'ont pas de GPS matériel. Dans la plupart des cas ce ne sera pas un problème, puisque la connexion Wi-Fi gratuite et de la Cellule-ID en fonction de l'emplacement fournit assez haute fidélité pour le fonctionnement typique de ces applications. Cependant, toutes les applications nécessitant un matériel GPS, tels que Les navigateurs GPS, devrait ajouter explicitement le "android.matériel.emplacement.gps" uses-feature de leur manifeste.

Si votre application nécessite un GPS pour fonctionner correctement et vous ne comprennent pas dans votre manifeste, déclaration, vos utilisateurs peut avoir une mauvaise application l'expérience.

Aussi, si vous êtes en utilisant pour la fusion fournisseur d'emplacement et que vous souhaitez recevoir la localisation la plus précise des échantillons de GPS (c'est à dire avec PRIORITY_HIGH_ACCURACY), vous devez inclure le "android.matériel.emplacement.gps" dans le manifeste de l'application de s'assurer que Google Play ne distribue que de votre application pour les appareils avec GPS les capteurs.

Vous pouvez lire plus au sujet de ce changement dans l' Développeurs Android Aider Centre de.

À partir de l' Android Développeurs Centre d'Aide

Afin de recevoir de l'emplacement des mises à jour de NETWORK_PROVIDER ou GPS_PROVIDER, vous devez demander la permission de l'utilisateur en déclarant le ACCESS_COARSE_LOCATION ou ACCESS_FINE_LOCATION autorisation, respectivement, dans votre fichier manifeste Android. Sans ces autorisations, votre application ne pourra pas lors de l'exécution lors de la demande de l'emplacement des mises à jour.

Si vous utilisez les deux NETWORK_PROVIDER et GPS_PROVIDER, alors vous avez besoin de demander uniquement les ACCESS_FINE_LOCATION autorisation, car il comprend une autorisation pour les fournisseurs de soins. L'autorisation pour ACCESS_COARSE_LOCATION permet d'accéder uniquement à NETWORK_PROVIDER.

Attention: Si votre application cibles Android 5.0 (API level 21) ou plus, vous devez déclarer que votre application utilise le android.matériel.emplacement.réseau ou android.matériel.emplacement.matériel gps de la fonctionnalité dans le fichier de manifeste, selon que votre application reçoit l'emplacement des mises à jour de NETWORK_PROVIDER ou de GPS_PROVIDER. Si votre application reçoit des informations de localisation à partir de l'un de ces emplacement fournisseur de sources, vous avez besoin de déclarer que l'application utilise ces fonctionnalités matérielles dans votre manifeste de l'application. Sur les appareils exécutant verions avant d'Android 5.0 (API 21), en demandant à l'ACCESS_FINE_LOCATION ou ACCESS_COARSE_LOCATION permission comprend implicite de la demande pour l'emplacement des fonctionnalités matérielles. Toutefois, en demandant à ces autorisations ne pas demander automatiquement l'emplacement du matériel de fonctionnalités sur Android 5.0 (API level 21) et plus élevé.

Je suis l'aide de la fondue fournisseur d'emplacement, le ciblage de l'API 21, et à l'aide de ACCESS_FINE_LOCATION. Je n'ai pas spécialement de soins si le GPS est disponible, mais seulement que la localisation la plus précise est signalé.

  • Basé sur la première citation, je pense que je n'ai pas à faire des changements.
  • Basé sur la deuxième citation, je pense que j'ai besoin à la fois d' android.hardware.location.gps et android.hardware.location.network. Ou est-ce seulement pour LocationManager et pas à fusibles emplacement?

Ai-je besoin d' android.hardware.location.gps et android.hardware.location.network ou pas?

18voto

Tanis.7x Points 9536

La deuxième citation est de vous dire que vous avez besoin soit d' android.hardware.location.network ou android.hardware.location.gps, si vous avez spécifiquement besoin de l'un ou l'autre fournisseur d'emplacement.

Si vous souhaitez des mises à jour via le GPS, vous avez besoin d' android.hardware.location.gps. Si vous souhaitez des mises à jour via le WiFi et les réseaux cellulaires, vous avez besoin d' android.hardware.location.network.

Si vous souhaitez des mises à jour à partir du réseau et GPS, vous devez inclure les deux <uses-feature> - éléments.

Si vous ne spécifiez pas de soit, votre appareil peut être installé sur les appareils sans que le fournisseur. Par exemple, il peut être installé sur un appareil sans GPS, réseau cellulaire ou Wi-Fi puce.

En d'autres termes, l'obtention de l'emplacement nécessite soit l'emplacement du réseau de la fonctionnalité ou de la fonction GPS. Si vous ne déclarez pas que votre application a besoin de l'un ou de l'autre, vous ne pouvez pas obtenir l'emplacement des mises à jour à tous.

API 21 vs 20 et ci-dessous

Remarque que ci-dessus n'est vrai que pour l'API 21 et au-dessus. Avant API 21, en demandant à l' ACCESS_COARSE_LOCATION autorisation implicite de l' location.network fonctionnalité, wheras demandant ACCESS_FINE_LOCATION implicite de l' location.gps (se reporter à la <uses-feature>).

Le seul changement est que, actuellement, pour l'API 21+, toute application demandant ACCESS_FINE_LOCATION sera bientôt disponible à installer sur les appareils sans GPS. Si votre application précédemment supposé GPS est disponible (et les besoins de GPS), vous devez vous assurer que vous avez la demande explicite pour android.hardware.location.gps.

Google dit que le réseau des fournisseurs d'emplacement sont maintenant assez bon pour un bel emplacement, par conséquent, le changement.

15voto

Budius Points 12015

TL;DR: Non, vous n'avez pas à ajouter de l' uses-feature de votre manifeste, mais en fonction, vous pouvez.

réponse complète:

uses-feature du manifeste est seulement alors que Google Play peut filtrer les périphériques qui ne contient pas une fonctionnalité qui est nécessaire pour l'application à exécuter correctement. (Des exemples sont le GPS pour un tour-par-tour de navigation de l'app, ou l'Appareil photo pour une application d'appareil photo).

Lire attentivement cette citation:

toutes les applications nécessitant un matériel GPS, tels que les navigateurs GPS, devrait ajouter explicitement le "android.matériel.emplacement.gps" uses-feature de leur manifeste

(...)

et que vous souhaitez recevoir la localisation la plus précise des échantillons de GPS

Comme vous le mentionnez, vous ne se soucient que de la FusedLocationProvider vous donne le meilleur emplacement disponible pour l'appareil est installé. Cela signifie que, même si vous demandez PRIORITY_HIGH_ACCURACY, votre application peut être installé sur des appareils qui ne contient pas de GPS et ne sera jamais un endroit aussi précis qu'un GPS, ou peut-être même (à quelques très rares cas particulier), être installés sur l'appareil qui ne contiennent pas de fournisseur d'emplacement.

edit:

Basé sur la deuxième citation, je pense que j'ai besoin à la fois android.matériel.emplacement.gps et android.matériel.emplacement.réseau. Ou est-ce seulement pour LocationManager et pas fusionné emplacement?

Je suis juste allé à creuser sur les docs https://developer.android.com/guide/topics/manifest/uses-feature-element.html#hw-features et l'a trouvé très intéressant, il y a 3 possibilités:

  • android.matériel.emplacement
  • android.matériel.emplacement.gps
  • android.matériel.emplacement.réseau

donc, sur cette base, si votre application ne peut pas fonctionner sans une forme quelconque de l'emplacement, vous devez utiliser le premier android.hardware.location, sinon, si votre application utilise l'emplacement, mais il n'est pas essentiel à sa fonctionnalité, vous pouvez être libre de ne pas inclure quoi que ce soit

10voto

Jatin Points 942

Solution simple et rapide:

L'application a besoin de mises à jour via GPS et utilise android.hardware.location.gps. Si vous souhaitez des mises à jour via les réseaux WiFi et cellulaires, vous avez besoin de android.hardware.location.network.

Ajoutez les lignes ci-dessous à votre fichier de manifeste en fonction de vos exigences en matière de données de localisation:

 <uses-feature android:name="android.hardware.location" android:required="false" />
<uses-feature android:name="android.hardware.location.gps" android:required="false" />
 

J'espère que cela t'aides..

2voto

mattm Points 3577

De ma compréhension, il suffit de lire la documentation pour l' utilisation de la fonctionnalité de l'élément de comprendre comment les applications sont filtrés dans le Google Play basé sur implicites et explicites uses-feature entrées:

Google Play filtres pour les applications qui sont visibles pour les utilisateurs, de sorte que les utilisateurs peuvent voir et à télécharger uniquement les applications qui sont compatibles avec leurs appareils. L'une des façons de filtrer les applications est en fonction de la compatibilité.

Pour déterminer une application de la fonction de la compatibilité avec un périphérique de l'utilisateur, Google Play compare:

Des fonctionnalités requises par l'application - une application déclare dispose d'éléments dans son manifeste avec... Fonctions disponibles sur l'appareil, en matériel ou en logiciel - un dispositif de rapports sur les fonctionnalités, il prend en charge en lecture seule des propriétés du système.

...

Si une fonctionnalité est explicitement déclaré comme étant nécessaire, Google Play ajoute la fonction de la liste des caractéristiques requises pour l'application. Puis, il les filtres de l'application auprès des utilisateurs sur les appareils qui n'offrent pas cette fonctionnalité.

Si une fonctionnalité est explicitement déclaré comme n'étant pas nécessaire, Google Play ne pas ajouter de la fonctionnalité à la liste des fonctionnalités requises. Pour cette raison, il est explicitement déclaré non-requis n'est jamais considérée comme lorsque le filtrage de la demande. Même si l'appareil n'est pas de fournir la déclaration de fonctionnalité, Google Play toujours considérer l'application compatible avec l'appareil et les montrer à l'utilisateur, sauf si d'autres règles de filtrage à appliquer.


L'implicite uses-feature d'éléments pour l'emplacement des autorisations sont les suivantes:

ACCESS_COARSE_LOCATION

  • android.hardware.location
  • android.hardware.location.network (Uniquement lors de la cible de l'API de niveau 20 ou plus bas.)

ACCESS_FINE_LOCATION

  • android.hardware.location
  • android.hardware.location.gps (Uniquement lors de la cible de l'API de niveau 20 ou plus bas.)

Le changement décrit dans Google message e-mail, c'est que l'implicite uses-feature d'éléments pour l' android.hardware.location.gps ne sera pas présent dans l'API 21+ avec ACCESS_FINE_LOCATION. La situation analogue semble être vrai pour ACCESS_COARSE_LOCATION et android.hardware.location.network.

Google encourage explicite de l'énumération de tous les uses-feature des entrées, mais fournit encore implicite entrées en fonction des autorisations. À partir de la documentation suivante extrait, je pense qu'il n'y a pas de différence entre le fait d'omettre une uses-feature , et en déclarant qu'il n'est requis, sauf s'il y a un implicite uses-feature entrée.

Si une fonctionnalité est explicitement déclaré comme n'étant pas nécessaire, Google Play ne pas ajouter de la fonctionnalité à la liste des fonctionnalités requises.


De votre application en cas d'utilisation détermine uses-feature des entrées devraient être présents. Voici quelques exemples de cas d'utilisation, avec toutes les uses-feature des entrées nécessaire, sauf indication contraire:

  1. L'Application utilise le GPS explicitement à partir de LocationManager ou aux besoins de l'application GPS de haute précision. C'est l'exemple donné dans Google e-mail.

    • ACCESS_FINE_LOCATION
    • android.hardware.location (implicite)
    • android.hardware.location.gps (implicite jusqu'à l'API 20)
  2. Utilise le Réseau de l'emplacement explicitement

    • ACCESS_COARSE_LOCATION
    • android.hardware.location (implicite)
    • android.hardware.location.network (implicite jusqu'à l'API 20)
  3. Utilise à la fois le GPS et Réseau

    • ACCESS_FINE_LOCATION
    • android.hardware.location (implicite)
    • android.hardware.location.gps (implicite jusqu'à l'API 20)
    • android.hardware.location.network
  4. Utilise au moins l'un des GPS et Réseau. C'est mon FusedLocationProviderApi cas dans la question d'origine.

    • ACCESS_FINE_LOCATION/ACCESS_COARSE_LOCATION
    • android.hardware.location (implicite)
  5. Utilise l'emplacement, si disponible, permet encore d'installation de l'application si pas disponible

    • ACCESS_FINE_LOCATION
    • android.hardware.location required=false (remplacer implicite)
    • android.hardware.location.gps required=false (remplacer implicite jusqu'à l'API 20)

1voto

androidXP Points 686

Comme par vous poser des Questions

Basé sur la première citation, je pense que je n'ai pas à faire tout les changements.

Vous N'avez pas besoin de faire tous les changements de la cause que vous utilisez FusedLocation qui détecte automatiquement GPS et NetworkProvider selon la disponibilité et vous donne une meilleure estimation de l'emplacement (Vous devez ajouter ACCESS_FINE_LOCATION autorisation d'obtenir de Haute Précision) .Donc, même si vous le ciblage au-dessus de la version de l'API 21 vous n'avez pas besoin de changer quelque chose dans votre application FusedLocation fonctionnera comme avant.

Et Comme par Seconde Citation

Vous avez juste besoin de l'ignorer parce que vous utilisez FusedLocation API Et Vous n'êtes pas à l'aide de LocationManager API qui vous remplacé par FusedLocation.De sorte que la deuxième offre est uniquement pour applications à l'aide de LocationManagar.

NETWORK_PROVIDER et GPS_PROVIDER fait Partie de LocationManager Pas FusedLocation API

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