Wann brauche ich android.hardware.location.gps und android.hardware.location.network?

Google informiert per E-Mail über Änderungen an den Berechtigungen des Android-Standorts:

Wir machen eine Änderung am 15. Oktober 2016, die Apps auf API Version 21 (Android 5.0, Lollipop) oder höher, die ACCESS_FINE_LOCATION, aber nicht explizit haben die "android.hardware.location.gps" verwendet-Funktion. Vorwärts gehen diese Apps zur Verfügung, um auf Geräten zu installieren, die keine GPS-Hardware haben. In den meisten Fällen wird dies kein Problem sein, da Wi-Fi und Cell-ID basierte Standort bietet eine hohe genug Treue für die typische Bedienung dieser Anwendungen. Allerdings sollten alle Apps, die GPS-Hardware erfordern, wie GPS-Navigatoren, explizit die "android.hardware.location.gps" use-feature zu ihrem Manifest hinzufügen.

  • Erstellen von ActionMode mit benutzerdefiniertem Layout in ActionBarSherlock
  • Von BitmapFactory.decodeByteArray unterstützte Formate (...)
  • Ich habe Android SDK auf rev aktualisiert. 22 gestern und es gibt keinen apkbuilder in werkzeugen
  • Android - Ändern des Geschmacksnutzungsnamens auf der Grundlage des Build-Typs
  • Warte bis Wifi auf Android verbunden
  • Wählen Sie das erste Element in ListView mit Cursor Loader
  • Wenn Ihre App GPS muss ordnungsgemäß funktionieren und Sie nicht in Ihre Manifest-Erklärung enthalten, können Ihre Benutzer eine schlechte App-Erfahrung haben.

    Wenn Sie den fused location provider verwenden und die genauesten Standortbeispiele von GPS (dh mit PRIORITY_HIGH_ACCURACY) erhalten möchten, müssen Sie die Funktion "android.hardware.location.gps" in das Manifest Ihrer App aufnehmen, um sicherzustellen, dass Google Play nur verteilt Ihre App auf Geräte mit GPS-Sensoren.

    Sie können mehr über diese Änderung in der Android Developers Help Center lesen.

    Von der Android Developers Help Center aus

    Um Standortaktualisierungen von NETWORK_PROVIDER oder GPS_PROVIDER zu erhalten, müssen Sie die Berechtigung des Benutzers anfordern, indem Sie entweder die Berechtigung ACCESS_COARSE_LOCATION bzw. ACCESS_FINE_LOCATION in Ihrer Android Manifestdatei erklären. Ohne diese Berechtigungen scheitert Ihre Anwendung zur Laufzeit bei der Anforderung von Standortaktualisierungen.

    Wenn Sie sowohl NETWORK_PROVIDER als auch GPS_PROVIDER verwenden, müssen Sie nur die ACCESS_FINE_LOCATION-Berechtigung anfordern, da es die Berechtigung für beide Provider enthält. Berechtigung für ACCESS_COARSE_LOCATION erlaubt den Zugriff nur auf NETWORK_PROVIDER.

    Achtung: Wenn Ihre App auf Android 5.0 (API Level 21) oder höher basiert, müssen Sie erklären, dass Ihre App die android.hardware.location.network- oder android.hardware.location.gps Hardware-Funktion in der Manifestdatei verwendet, je nachdem, ob Ihr App empfängt Standortaktualisierungen von NETWORK_PROVIDER oder von GPS_PROVIDER. Wenn Ihre App Standortinformationen von einer dieser Standortanbieterquellen erhält, müssen Sie erklären, dass die App diese Hardwarefunktionen in Ihrem Appmanifest verwendet. Bei Geräten, die Verionen vor Android 5.0 (API 21) ausführen, fordert die Berechtigung ACCESS_FINE_LOCATION oder ACCESS_COARSE_LOCATION eine implizite Anforderung für Standorthardware-Features an. Allerdings fordert die Anforderung dieser Berechtigungen nicht automatisch Standort-Hardware-Features auf Android 5.0 (API Level 21) und höher an.

    Ich verwende den fusionierten Standortanbieter, ACCESS_FINE_LOCATION API 21 und benutze ACCESS_FINE_LOCATION . Ich weiß nicht genau, ob GPS verfügbar ist, nur dass der genaueste Ort gemeldet wird.

    • Basierend auf dem ersten Zitat, glaube ich, muss ich keine Änderungen vornehmen.
    • Basierend auf dem zweiten Zitat, denke ich, ich brauche sowohl android.hardware.location.gps und android.hardware.location.network . Oder ist das nur für LocationManager und nicht verschmolzener Ort?

    Brauche ich android.hardware.location.gps und android.hardware.location.network oder nicht?

  • Wie kann man auf den Inhalt von Android Emulator Datenbanken zugreifen?
  • Deaktivieren Sie Positionsfokus in ListView
  • Wie kann man sowohl normal als auch Split ActionBar anzeigen?
  • Fehler beim Auflösen: com.google.firebase: firebase-core: 11.2.0
  • Ändern Sie die DialogFragment-Eingabe / Exit-Übergang bei kurz vor dem Entlassen
  • Wie man Videos mit YouTube-Daten-API in Android durchsucht
  • 6 Solutions collect form web for “Wann brauche ich android.hardware.location.gps und android.hardware.location.network?”

    Das zweite Zitat sagt Ihnen, dass Sie entweder android.hardware.location.network oder android.hardware.location.gps , wenn Sie speziell einen oder den anderen Standortanbieter benötigen.

    Wenn Sie Updates über GPS wünschen, benötigen Sie android.hardware.location.gps . Wenn Sie Updates über die WiFi und Mobilfunknetze wollen, benötigen Sie android.hardware.location.network .

    Wenn Sie Updates aus dem Netzwerk und GPS wünschen, sollten Sie beide <uses-feature> -Elemente enthalten.

    Wenn Sie auch nicht angeben, kann Ihr Gerät auf Geräten ohne diesen Provider installiert sein. Zum Beispiel kann es auf einem Gerät ohne GPS, Mobilfunknetz oder Wi-Fi-Chip installiert werden.

    Mit anderen Worten, das Erhalten von Standort erfordert entweder die Netzwerk-Location-Funktion oder die GPS-Funktion. Wenn Sie nicht erklären, dass Ihre Anwendung das eine oder andere benötigt, können Sie überhaupt keine Standortaktualisierungen erhalten.

    API 21 vs 20 und unten

    Beachten Sie, dass das oben genannte gilt nur für API 21 und höher. Vor der API 21 forderte die Anforderung der ACCESS_COARSE_LOCATION Berechtigung die location.network Funktion an, wohingegen ACCESS_FINE_LOCATION die location.gps Funktion angedeutet hat (siehe <uses-feature> ACCESS_FINE_LOCATION <uses-feature> ).

    Die einzige Änderung ist jetzt, dass für API 21+ jede App, die ACCESS_FINE_LOCATION anfordert, bald verfügbar sein wird, um auf Geräten ohne GPS zu installieren. Wenn deine App vorher angenommen wurde, dass GPS verfügbar war (und braucht GPS), müssen Sie sicherstellen, dass Sie die explizite Anforderung für android.hardware.location.gps .

    Google sagt, dass Netzwerk-Standort-Anbieter sind jetzt gut genug für eine gute Lage, also die Änderung.

    TL; DR : Nein, du musst deiner Manifest nicht hinzufügen, aber je nachdem, kannst du.

    Vollständige Antwort :

    uses-feature des Manifests ist nur so, dass Google Play Geräte herausfiltern kann, die keine Funktion enthalten, die für die korrekte Ausführung der Anwendung erforderlich ist. (Beispiele sind GPS für eine Turn-by-Turn Navigations-App oder Kamera für eine Kamera-App).

    Lesen Sie sorgfältig dieses Zitat:

    Alle Apps, die GPS-Hardware erfordern, wie GPS-Navigatoren, sollten explizit die "android.hardware.location.gps" use-feature zu ihrem Manifest hinzufügen

    (…)

    Und wünsche die genauesten Standortproben von GPS

    Wie Sie erwähnen, Sie nur darauf achten, dass die FusedLocationProvider gibt Ihnen die beste Stelle zur Verfügung, um das Gerät installiert ist. Das heißt, obwohl Sie PRIORITY_HIGH_ACCURACY anfordern, kann Ihre App auf Geräten installiert werden, die kein GPS enthalten und niemals einen Standort genauso genau wie ein GPS bekommen oder vielleicht sogar (in einem sehr seltenen seltsamen Fall) installiert werden Gerät, das keinen Standortanbieter enthält.

    bearbeiten:

    Basierend auf dem zweiten Zitat, denke ich, ich brauche sowohl android.hardware.location.gps und android.hardware.location.network. Oder ist das nur für LocationManager und nicht verschmolzener Ort?

    Ich habe gerade an den docs https://developer.android.com/guide/topics/manifest/uses-feature-element.html#hw-features gegraben und fand es sehr interessant, da gibt es 3 Möglichkeiten:

    • Android.hardware.location
    • Android.hardware.location.gps
    • Android.hardware.location.network

    So basiert darauf, dass, wenn Ihre Anwendung kann nicht ohne irgendeine Form von Standort arbeiten, sollten Sie die erste android.hardware.location , sonst, wenn Ihre App verwendet Standort, aber es ist nicht wesentlich für seine Funktionalität, können Sie frei sein, nichts enthalten

    Schnelle und einfache Lösung:

    App muss Updates über GPS verwenden android.hardware.location.gps. Wenn Sie Updates über die WiFi und Mobilfunknetze wollen, benötigen Sie android.hardware.location.network.

    Fügen Sie unterhalb Ihrer Standortdatendaten folgende Zeilen hinzu:

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

    Hoffe das hilft..

    Wie pro Fragen Fragen

    Basierend auf dem ersten Zitat, glaube ich, muss ich keine Änderungen vornehmen.

    Sie müssen keine Änderungen vornehmen, weil Sie FusedLocation die GPS und NetworkProvider automatisch nach Verfügbarkeit FusedLocation und Ihnen den besten Standort schätzt ( Sie müssen die ACCESS_FINE_LOCATION hinzufügen, um eine hohe Genauigkeit zu erhalten. ) Auch wenn Sie über API-Version klicken 21 Sie brauchen nicht, etwas in Ihrer App zu ändern FusedLocation Arbeit wie vorher.

    Und nach dem zweiten Zitat

    Sie müssen es nur ignorieren, weil Sie FusedLocation API verwenden und Sie sind nicht mit LocationManager API, die Sie ersetzt durch FusedLocation So zweite Zitat ist nur für Apps, die mit LocationManagar .

    NETWORK_PROVIDER und GPS_PROVIDER ist Teil von LocationManager Not FusedLocation API

    Aus meinem Verständnis genügt es, die Dokumentation für das use-feature-Element zu lesen, um zu verstehen, wie Anwendungen in Google Play gefiltert werden, basierend auf impliziten und expliziten Verwendungen – Feature-Einträge:

    Google Play filtert die Anwendungen, die für Benutzer sichtbar sind, so dass Benutzer nur diejenigen Anwendungen sehen und herunterladen können, die mit ihren Geräten kompatibel sind. Eine der Möglichkeiten, wie es Anwendungen filtert, ist durch Merkmalskompatibilität.

    Um die Kompatibilität einer Anwendung mit dem Gerät eines bestimmten Benutzers zu ermitteln, vergleicht Google Play:

    Von der Applikation benötigte Funktionen – eine Applikation deklariert Features in Elementen in ihrem Manifest mit … Features auf dem Gerät, in Hardware oder Software – ein Gerät meldet die Funktionen, die es als schreibgeschützte Systemeigenschaften unterstützt.

    Wenn eine Funktion explizit als erforderlich deklariert wird, fügt Google Play die Funktion zur Liste der erforderlichen Funktionen für die Anwendung hinzu. Es filtert dann die Anwendung von Benutzern auf Geräten, die diese Funktion nicht bereitstellen.

    Wenn eine Funktion explizit als nicht erforderlich erklärt wird, fügt Google Play die Funktion nicht zur Liste der erforderlichen Funktionen hinzu. Aus diesem Grund wird bei der Filterung der Anwendung kein explizit deklariertes, nicht benötigtes Merkmal berücksichtigt. Auch wenn das Gerät die deklarierte Funktion nicht bereitstellt, wird Google Play die mit dem Gerät kompatible Anwendung immer noch berücksichtigen und es dem Benutzer anzeigen, sofern keine anderen Filterregeln gelten.


    Die impliziten uses-feature für Standortberechtigungen sind:

    ACCESS_COARSE_LOCATION

    • android.hardware.location
    • android.hardware.location.network (Nur wenn die Ziel-API-Ebene 20 oder niedriger ist).

    ACCESS_FINE_LOCATION

    • android.hardware.location
    • android.hardware.location.gps (Nur wenn die Ziel-API-Ebene 20 oder niedriger ist).

    Die in der E-Mail-Nachricht von Google beschriebene Änderung ist, dass die impliziten uses-feature für android.hardware.location.gps nicht in API 21+ mit ACCESS_FINE_LOCATION . Die analoge Situation scheint für ACCESS_COARSE_LOCATION und android.hardware.location.network wahr zu android.hardware.location.network .

    Google fördert die explizite Aufzählung aller uses-feature Einträge, bietet aber immer noch implizite Einträge auf der Grundlage von Berechtigungen. Aus dem folgenden Dokumentationsauszug denke ich, dass es keinen Unterschied zwischen dem Weglassen einer uses-feature und dem Deklarieren gibt, dass es nicht erforderlich ist, es sei denn, es gibt einen impliziten uses-feature .

    Wenn eine Funktion explizit als nicht erforderlich erklärt wird, fügt Google Play die Funktion nicht zur Liste der erforderlichen Funktionen hinzu.


    Der Anwendungsfall Ihrer Anwendung bestimmt, welche uses-feature vorhanden sein sollen. Hier sind einige Beispiel Anwendungsfälle, mit allen uses-feature Einträge erforderlich, wenn nicht anders angegeben:

    1. Anwendung nutzt GPS explizit von LocationManager oder Applikation benötigt GPS 'hohe Genauigkeit. Dies ist das Beispiel in der E-Mail von Google.

      • ACCESS_FINE_LOCATION
      • android.hardware.location (implizit)
      • android.hardware.location.gps (implizite bis API 20)
    2. Verwendet Netzwerkstandort explizit

      • ACCESS_COARSE_LOCATION
      • android.hardware.location (implizit)
      • android.hardware.location.network (implizite bis API 20)
    3. Verwendet sowohl GPS als auch Netzwerk

      • ACCESS_FINE_LOCATION
      • android.hardware.location (implizit)
      • android.hardware.location.gps (implizite bis API 20)
      • android.hardware.location.network
    4. Verwendet mindestens eines von GPS und Netzwerk. Dies ist mein FusedLocationProviderApi Fall in der ursprünglichen Frage.

      • ACCESS_FINE_LOCATION / ACCESS_COARSE_LOCATION
      • android.hardware.location (implizit)
    5. Verwendet Standort, falls vorhanden, erlaubt noch Anwendungsinstallation, falls nicht vorhanden

      • ACCESS_FINE_LOCATION
      • android.hardware.location required = false (überschreiben implizit)
      • android.hardware.location.gps required = false (Override implizit bis API 20)

    Ja, du brauchst beide Berechtigungen, wenn du einen fusionierten Provider benutzt.

    ACCESS_COARSE_LOCATION – Um Standortaktualisierungen von NETWORK_PROVIDER . Hinzufügen von android.hardware.location.network Feature-Berechtigung ist genug.

    ACCESS_FINE_LOCATION – Um Standortaktualisierungen von NETWORK_PROVIDER und GPS_PROVIDER . Sie sollten sowohl android.hardware.location.gps als auch android.hardware.location.network Feature-Berechtigungen hinzufügen. Anwendbar für auch verschmolzener Standort.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.