0Pricing
Android Academy · Lektion

Den Standort des Benutzers abrufen

Grundlagen des Fused Location Provider

Den Standort des Benutzers abrufen ist eine kostenlose Android Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Android Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Android Academy-Kurs umfasst insgesamt 4 Lektionen.

Wo befindet sich der Benutzer?

Die meisten standortbezogenen Apps beginnen mit einer Frage: Wo befindet sich das Gerät gerade? Android beantwortet diese Frage über den Fused Location Provider, der Teil der Google Play-Dienste ist.

In dieser Lektion fügen Sie die Abhängigkeit hinzu, fragen einen einzelnen Standort ab, empfangen kontinuierliche Aktualisierungen und zeigen das Ergebnis in Compose an.

Warum der Fused Location Provider?

Android verfügt über mehrere Quellen für Standortdaten: GPS, WLAN und Mobilfunkmasten. Der Fused Location Provider kombiniert sie intelligent, um bei möglichst geringem Akkuverbrauch den bestmöglichen Standort zu liefern.

LocationManager wird inzwischen fast nie mehr direkt verwendet – der Fused-Client ist einfacher und intelligenter.

// build.gradle.kts (module)
dependencies {
    implementation("com.google.android.gms:play-services-location:21.3.0")
}

Die Berechtigung deklarieren

Der Standort ist eine sensible Ressource. Deklarieren Sie die Berechtigung in Ihrer AndroidManifest.xml. Verwenden Sie ACCESS_FINE_LOCATION für eine präzise Positionierung oder ACCESS_COARSE_LOCATION für eine ungefähre Position.

Die Deklaration ist nur der erste Schritt – Sie müssen die Berechtigung auch zur Laufzeit anfordern (dies wird in einer späteren Lektion behandelt).

<!-- AndroidManifest.xml -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

Den Fused-Client erstellen

Rufen Sie einen FusedLocationProviderClient über LocationServices ab. Holen Sie sich in Compose den Kontext mit LocalContext.current und merken Sie sich den Client, damit er nicht bei jeder erneuten Komposition neu erstellt wird.

import com.google.android.gms.location.LocationServices

@Composable
fun rememberFusedClient() = run {
    val context = LocalContext.current
    remember {
        LocationServices.getFusedLocationProviderClient(context)
    }
}

Den zuletzt bekannten Standort abrufen

Die schnellste Antwort liefert lastLocation – der letzte Standort, den das System bereits zwischengespeichert hat. Das Ergebnis ist ein Task; fügen Sie daher einen Erfolgs-Listener hinzu.

Der Wert kann null sein, wenn kürzlich keine App einen Standort angefordert hat. Prüfen Sie ihn daher immer auf null.

@SuppressLint("MissingPermission")
fun fetchLastLocation(
    client: FusedLocationProviderClient,
    onResult: (Location?) -> Unit
) {
    client.lastLocation
        .addOnSuccessListener { location -> onResult(location) }
        .addOnFailureListener { onResult(null) }
}

Mit Coroutines auf den Task warten

Callbacks werden schnell unübersichtlich. Die Bibliothek kotlinx-coroutines-play-services stellt .await() bereit, sodass Sie einen Standort mit übersichtlichem suspendierendem Code abrufen können.

import kotlinx.coroutines.tasks.await

@SuppressLint("MissingPermission")
suspend fun currentLastLocation(
    client: FusedLocationProviderClient
): Location? {
    return client.lastLocation.await()
}

Einen aktuellen Standort anfordern

lastLocation kann veraltet sein. Für eine aktuelle Position rufen Sie getCurrentLocation mit einer Priorität auf. PRIORITY_HIGH_ACCURACY verwendet GPS; PRIORITY_BALANCED_POWER_ACCURACY spart Akku.

import com.google.android.gms.location.Priority
import com.google.android.gms.location.CurrentLocationRequest

@SuppressLint("MissingPermission")
suspend fun freshLocation(
    client: FusedLocationProviderClient
): Location? {
    val request = CurrentLocationRequest.Builder()
        .setPriority(Priority.PRIORITY_HIGH_ACCURACY)
        .build()
    return client.getCurrentLocation(request, null).await()
}

Kontinuierliche Standortaktualisierungen

Für Navigation oder Tracking benötigen Sie einen Stream von Aktualisierungen. Erstellen Sie mit einem Intervall einen LocationRequest und registrieren Sie über requestLocationUpdates einen LocationCallback.

Beenden Sie die Aktualisierungen immer, sobald Sie sie nicht mehr benötigen, um Akku zu sparen.

import com.google.android.gms.location.LocationRequest
import com.google.android.gms.location.LocationResult
import com.google.android.gms.location.LocationCallback

val request = LocationRequest.Builder(
    Priority.PRIORITY_HIGH_ACCURACY,
    5000L // 5 seconds
).build()

val callback = object : LocationCallback() {
    override fun onLocationResult(result: LocationResult) {
        result.lastLocation?.let { /* use it */ }
    }
}

Aktualisierungen als Flow

Ein übersichtliches Muster verpackt die Aktualisierungen in einen callbackFlow. So können Verbraucher Standortdaten sammeln, und die Aktualisierungen werden über awaitClose automatisch beendet, sobald das Sammeln endet.

import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.flow.callbackFlow

@SuppressLint("MissingPermission")
fun FusedLocationProviderClient.locationFlow(request: LocationRequest) = callbackFlow {
    val cb = object : LocationCallback() {
        override fun onLocationResult(result: LocationResult) {
            result.lastLocation?.let { trySend(it) }
        }
    }
    requestLocationUpdates(request, cb, Looper.getMainLooper())
    awaitClose { removeLocationUpdates(cb) }
}

Den Standort in Compose anzeigen

Sammeln Sie das Ergebnis in einem Composable: Verwenden Sie LaunchedEffect für eine einmalige Abfrage oder collectAsStateWithLifecycle für einen Stream. Zeigen Sie anschließend die Koordinaten an.

@Composable
fun LocationLabel(client: FusedLocationProviderClient) {
    var location by remember { mutableStateOf<Location?>(null) }
    LaunchedEffect(Unit) {
        location = freshLocation(client)
    }
    Text(
        location?.let { "Lat ${it.latitude}, Lng ${it.longitude}" }
            ?: "Locating..."
    )
}

Abwägung zwischen Akkuverbrauch und Genauigkeit

Standortdaten gehören in mobilen Apps zu den größten Akkuverbrauchern. Wählen Sie die geringste Genauigkeit, die Ihre Anforderungen noch erfüllt, verwenden Sie das längste akzeptable Aktualisierungsintervall und beenden Sie Aktualisierungen immer, sobald der Bildschirm nicht mehr angezeigt wird.

Hohe Genauigkeit und häufige Aktualisierungen entleeren den Akku schnell – verwenden Sie diese Kombination nur für die aktive Navigation.

Kurze Überprüfung

Sie benötigen jetzt die aktuellste und genaueste einzelne Position und möchten dafür eine suspendierende Funktion verwenden. Welcher Ansatz eignet sich am besten?

Zusammenfassung

Sie können jetzt den Gerätestandort auslesen:

  • Fügen Sie play-services-location hinzu und deklarieren Sie ACCESS_FINE/COARSE_LOCATION.
  • Rufen Sie über LocationServices einen FusedLocationProviderClient ab.
  • Verwenden Sie lastLocation für eine zwischengespeicherte Position und getCurrentLocation für eine aktuelle.
  • Empfangen Sie Aktualisierungen als Stream über requestLocationUpdates bzw. einen callbackFlow und beenden Sie sie, um Akku zu sparen.

Als Nächstes: Marker zeichnen und die Kamera auf diese Koordinaten bewegen.

Häufig gestellte Fragen

Ist die Lektion „Den Standort des Benutzers abrufen“ kostenlos?

Ja — der vollständige Text von „Den Standort des Benutzers abrufen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Android Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Android Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Den Standort des Benutzers abrufen“?

Grundlagen des Fused Location Provider Du übst Android Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Android Academy zu starten?

Keine Vorkenntnisse erforderlich. Android Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Den Standort des Benutzers abrufen“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Android Academy-Lektion Code schreiben und ausführen?

Ja. Jede Android Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Eine Karte anzeigen
  2. Den Standort des Benutzers abrufen
  3. Marker und Kamera
  4. Standortberechtigungen richtig umsetzen
← Zurück zu Android Academy