Looking for android Keywords? Try Ask4Keywords

AndroidOrt


Einführung

Android-Standort-APIs werden in einer Vielzahl von Apps für verschiedene Zwecke verwendet, z. B. zum Ermitteln des Benutzerorts, zum Benachrichtigen, wenn ein Benutzer einen allgemeinen Bereich (Geofencing) verlassen hat, und zur Interpretation der Benutzeraktivitäten (Gehen, Laufen, Fahren usw.).

Android-Standort-APIs sind jedoch nicht die einzige Möglichkeit, den Standort des Benutzers zu ermitteln. Im Folgenden finden Sie Beispiele zur Verwendung von LocationManager und anderen gängigen Standortbibliotheken von Android.

Bemerkungen

Für das Erstellen von standortbezogenen Apps in Android gibt es zwei Pfade:

Location-Manager

Pros

  • Feinere Kontrolle
  • In allen Geräten verfügbar
  • Teil des Android-Frameworks

Cons

  • Die Batterieentladung ist ein Problem, wenn sie nicht ordnungsgemäß verwaltet wird
  • Erfordert eine Logik zum Wechseln der Standortanbieter, wenn das Gerät keinen Standort finden kann (z. B. schlechtes GPS in einem Gebäude)

Eigenschaften

  • NMEA-Listener
  • GPS Status Listener
  • Hören Sie sich den Status des Anbieters ab (z. B. GPS ist vom Benutzer deaktiviert)
  • Liste der Anbieter, aus denen die Standortquelle ausgewählt werden kann

Anbieter

Geographisches Positionierungs System

  • Erforderliche Berechtigungen:
  • Genauigkeit: 10m - 100m
  • Leistungsbedarf: HIGH
  • Verfügbarkeit: Weltweit (mit freier Sicht zum Himmel)
  • HINWEISE :
    • Standortaktualisierungen werden in der Regel einmal pro Sekunde gesendet. In Situationen, in denen GPS jedoch längere Zeit nicht verwendet wurde und A-GPS nicht verfügbar ist, dauert es einige Minuten, bis ein Standort empfangen wird.
    • In Fällen, in denen die freie Sicht zum Himmel versperrt ist, werden GPS-Punkte nicht sehr gut gebündelt (Positionspunkte "springen"), und die Genauigkeit kann aufgrund des " Urban Canyon " -Effekts in bestimmten Bereichen irreführend sein.

Netzwerk

  • Erforderliche Berechtigungen:
  • Genauigkeit: 100m - 1000m +
  • Leistungsbedarf: LOW - MEDIUM
  • Verfügbarkeit: In Reichweite des Zellenturm- oder WLAN-Signals
  • ANMERKUNGEN:
    • Standortaktualisierungen werden seltener als GPS ausgeführt
    • Standortaktualisierungen bilden sich normalerweise nicht gut zusammen (Standortpunkte "springen") und die Genauigkeit kann von der Anzahl verschiedener Faktoren abhängen (Anzahl der WLAN-Signale, Signalstärke, Typ des Zellturms usw.).

Passiv

  • Erforderliche Berechtigungen:
  • Genauigkeit: 10m - 1000m +
  • Leistungsbedarf: KEINE
  • Verfügbarkeit: Nur wenn eine andere App einen Standort von GPS oder Netzwerk empfängt
  • ANMERKUNGEN:
    • Verlassen Sie sich nicht darauf, um Sie ständig zu aktualisieren. Dieser hört passiv auf andere Apps, die Standortanfragen stellen, und gibt diese Orte zurück.
    • Gibt keine von FusedLocationProviderApi generierten Punkte zurück, sondern nur die zugrunde liegenden Standortpunkte, die zu ihrer Erzeugung verwendet werden.

FusedLocationProviderApi

Pros

  • Bietet weniger Batterieentlastung "out of the box"
  • Behandelt schlechtes GPS gut
  • Ruft regelmäßig Updates auf

Cons

  • Weniger genaue Kontrolle über GPS
  • Ist möglicherweise nicht auf allen Geräten oder in bestimmten Ländern verfügbar
  • Erfordert die Bibliotheksabhängigkeit von Drittanbietern

Eigenschaften

  • Gut gemanagte Nutzung von Standortanbietern für optimale Einsparungen beim Batteriebetrieb
  • Erzeugt normalerweise genauere Punkte als Network Location Provider
  • Häufigere Aktualisierungen der Bibliothek ermöglichen weitere Verbesserungen
  • Sie müssen nicht angeben, welcher Providertyp verwendet werden soll

LocationRequest Prioritätsstufen

PRIORITY_HIGH_ACCURACY

  • Erforderliche Berechtigungen:
  • Genauigkeit: 10m - 100m
  • Leistungsbedarf: HIGH
  • Verfügbarkeit: Wo immer Google Play-Dienste verfügbar sind.
  • ANMERKUNGEN:
    • Wenn ACCESS_FINE_LOCATION nicht verwendet wird, verwendet dies kein GPS zum Generieren von Standortaktualisierungen, findet jedoch unter den richtigen Bedingungen immer noch einen ziemlich genauen Punkt.
    • Wenn ACCESS_FINE_LOCATION verwendet wird, kann GPS möglicherweise verwendet werden, um Standortpunkte zu generieren, je nachdem, wie genau das Gerät unter den Umgebungsbedingungen aktuell verfolgt werden kann.
    • Obwohl dies möglicherweise genauere Standortaktualisierungen enthält als die anderen Einstellungen, ist es dennoch anfällig für den " Urban Canyon " -Effekt.

PRIORITY_BALANCED_POWER_ACCURACY

  • Erforderliche Berechtigungen:
  • Genauigkeit: 100m - 1000m +
  • Leistungsbedarf: MEDIUM
  • Verfügbarkeit: Wo immer Google Play-Dienste verfügbar sind.
  • ANMERKUNGEN:
    • Gleiche Notizen wie PRIORITY_HIGH_ACCURACY
    • Obwohl es unwahrscheinlich ist, kann diese Einstellung immer noch GPS verwenden, um einen Standort zu generieren.

PRIORITY_LOW_POWER

  • Erforderliche Berechtigungen:
  • Genauigkeit: 100m - 1000m +
  • Leistungsbedarf: LOW
  • Verfügbarkeit: Wo immer Google Play-Dienste verfügbar sind.
  • ANMERKUNGEN:
    • Verwendet wahrscheinlich kein GPS, ist aber bisher noch nicht getestet.
    • Updates sind normalerweise nicht sehr genau
    • Wird im Allgemeinen zum Erkennen signifikanter Standortänderungen verwendet

PRIORITY_NO_POWER

  • Erforderliche Berechtigungen:
  • Genauigkeit: 10m - 1000m +
  • Leistungsbedarf: KEINE
  • Verfügbarkeit: Wo immer Google Play-Dienste verfügbar sind.
  • ANMERKUNGEN:
    • Funktioniert fast identisch mit dem LocationManager PASSIVE_PROVIDER
    • PASSIVE_PROVIDER bei PASSIVE_PROVIDER Aktualisierungen der Google Play-Dienste zurück, wobei PASSIVE_PROVIDER die zugrunde liegenden Standortaktualisierungen PASSIVE_PROVIDER

Fehlerbehebung

OnLocationChanged () wurde nie aufgerufen

Da dies anscheinend ein häufiges Problem beim Beziehen von Android-Standorten ist, werde ich eine kurze Checkliste der gebräuchlichen Korrekturen auflisten:


  1. Überprüfen Sie Ihr Manifest!

    Eines der häufigsten Probleme ist, dass die richtigen Berechtigungen niemals erteilt wurden. Wenn Sie GPS (mit oder ohne Netzwerk) verwenden, verwenden Sie <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> , ansonsten verwenden Sie <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> . Die FusedLocationApi von Google erfordert ACCESS_FINE_LOCATION .


  1. (Für Android 6+) Überprüfen Sie die Laufzeitberechtigungen !

    Nach Berechtigungen suchen und Berechtigungen anfordern! Wenn Sie niemals Berechtigungen erhalten, werden Sie zum Absturz führen oder, schlimmer (wenn Sie alle Ausnahmen wahrnehmen), erhalten Sie keine Hinweise auf irgendetwas! Es ist egal, ob der Benutzer Ihnen beim Start der App die Berechtigung erteilt. Überprüfen Sie immer, ob Sie für alle Anrufe Berechtigungen haben. Der Benutzer kann einfach zu seinen Einstellungen wechseln und sie widerrufen.


  1. Überprüfen Sie Ihren Code!

    Sind Sie sicher, dass Sie den richtigen Hörer übergeben? Haben Sie diesen BroadcastReceiver oder IntentService zu Ihrem Manifest IntentService ? Verwenden Sie PendingIntent.getService() für eine BroadcastReceiver Klasse oder getBroadcast() für eine IntentService Klasse? Sind Sie sicher, dass Sie Ihren Listener nicht sofort nach der Abfrage an einer anderen Stelle in Ihrem Code abmelden?


  1. Geräteeinstellungen überprüfen!

    Stellen Sie natürlich sicher, dass Sie Standortdienste aktiviert haben.

    Geben Sie hier die Bildbeschreibung ein

    Wenn Sie Netzwerkdienste verwenden, haben Sie "Scannen immer verfügbar" aktiviert? Haben Sie Ihren Standortmodus auf "Beste" ("Hohe Genauigkeit") oder "Batteriesparen" ("Nur Netzwerk") eingestellt?

    Geben Sie hier die Bildbeschreibung ein

    Wenn Sie GPS verwenden, haben Sie im Standortmodus "Beste" ("Hohe Genauigkeit") oder "Nur Gerät" aktiviert?

    Geben Sie hier die Bildbeschreibung ein


  1. Überprüfen Sie Ihren Code!

    Ja, das ist zweimal hier. Haben Sie versucht, einen LocationListener anstelle eines PendingIntent oder umgekehrt, um sicherzustellen, dass Sie LocationManager tatsächlich ordnungsgemäß implementiert haben? Sind Sie sicher, dass die Standortanfrage in einem Teil des Aktivitäten- oder Service-Lebenszyklus, von dem Sie nicht erwartet hätten, nicht entfernt wird?


  1. Überprüfen Sie Ihre Umgebung!

    Testen Sie GPS im ersten Stock eines Gebäudes mitten in San Francisco? Testen Sie Netzwerkstandorte mitten im Nirgendwo? Arbeiten Sie in einem geheimen unterirdischen Bunker ohne Funksignale und fragen Sie sich, warum Ihr Gerät keinen Standort findet? Überprüfen Sie immer Ihre Umgebung, wenn Sie versuchen, Standortprobleme zu beheben!


Es kann viele andere, weniger offensichtliche Gründe dafür geben, dass der Standort nicht funktioniert. Bevor Sie jedoch die esoterischen Korrekturen durchsuchen, müssen Sie diese kurze Checkliste durchgehen.

Ort Verwandte Beispiele