0Pricing
Android Academy · Lektion

Standortberechtigungen richtig umsetzen

Standort im Vordergrund und präziser Standort

Standortberechtigungen richtig umsetzen ist eine kostenlose Android Academy-Lektion auf CoddyKit. Dies ist Lektion 4 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.

Berechtigungen sind nicht optional

Der Standort gehört zu den sensibelsten Berechtigungen von Android. Die Deklaration im Manifest reicht nicht aus – bei modernem Android müssen Sie den Benutzer zur Laufzeit fragen und jede Antwort angemessen behandeln.

Diese Lektion behandelt die Berechtigungsstufen, das Anfordern in Compose sowie den Umgang mit Ablehnungen und den neuen Regeln für präzise oder ungefähre sowie Hintergrund-Standorte.

Die drei Standortberechtigungen

Android teilt den Standortzugriff in Stufen ein:

  • ACCESS_COARSE_LOCATION – ungefähr (etwa auf Straßenblockebene).
  • ACCESS_FINE_LOCATION – präzise (GPS-Genauigkeit).
  • ACCESS_BACKGROUND_LOCATION – Zugriff, während Ihre App nicht im Vordergrund ausgeführt wird.

Fordern Sie nur an, was Sie tatsächlich benötigen. Hintergrundzugriff wird im Play Store besonders streng geprüft.

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- only if truly needed: -->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />

Berechtigungen in Compose anfordern

Die Activity Result APIs stellen einen Launcher für Berechtigungsdialoge bereit. Verwenden Sie in Compose rememberLauncherForActivityResult mit dem Vertrag RequestMultiplePermissions.

import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.result.contract.ActivityResultContracts

val launcher = rememberLauncherForActivityResult(
    ActivityResultContracts.RequestMultiplePermissions()
) { result ->
    val fine = result[Manifest.permission.ACCESS_FINE_LOCATION] == true
    val coarse = result[Manifest.permission.ACCESS_COARSE_LOCATION] == true
    // react to the user's choice
}

Die Anfrage starten

Öffnen Sie den Dialog, indem Sie launch() mit dem Berechtigungsarray aufrufen – normalerweise als Reaktion auf einen Tipp auf eine Schaltfläche und nicht automatisch beim Laden des Bildschirms.

Button(onClick = {
    launcher.launch(
        arrayOf(
            Manifest.permission.ACCESS_FINE_LOCATION,
            Manifest.permission.ACCESS_COARSE_LOCATION
        )
    )
}) {
    Text("Enable location")
}

Prüfen, ob die Berechtigung bereits erteilt wurde

Fordern Sie eine bereits erteilte Berechtigung nicht erneut an. Prüfen Sie dies mit ContextCompat.checkSelfPermission, bevor Sie die Anfrage starten.

import androidx.core.content.ContextCompat
import android.content.pm.PackageManager

fun hasFineLocation(context: Context): Boolean {
    return ContextCompat.checkSelfPermission(
        context,
        Manifest.permission.ACCESS_FINE_LOCATION
    ) == PackageManager.PERMISSION_GRANTED
}

Präzise oder ungefähre Position

Seit Android 12 (API 31) können Benutzer den Standort als ungefähr freigeben, selbst wenn Sie eine präzise Position angefordert haben. Sie müssen daher beide Berechtigungen für präzise und ungefähre Position gemeinsam anfordern und akzeptieren, dass der Benutzer die Berechtigung auf die ungefähre Position beschränkt.

Entwickeln Sie Ihre Funktion möglichst so, dass sie auch mit einer ungefähren Position sinnvoll funktioniert.

// Request both — the system shows a Precise/Approximate toggle
launcher.launch(
    arrayOf(
        Manifest.permission.ACCESS_FINE_LOCATION,
        Manifest.permission.ACCESS_COARSE_LOCATION
    )
)
// If only COARSE comes back granted, you got approximate location.

Eine Begründung anzeigen

Wenn der Benutzer die Berechtigung einmal abgelehnt hat, können Sie mit shouldShowRequestPermissionRationale prüfen, ob Android eine erneute Erklärung empfiehlt. Wenn der Wert true ist, zeigen Sie vor einer erneuten Anfrage eine verständliche Erklärung, warum Sie den Standort benötigen.

import androidx.core.app.ActivityCompat

val shouldExplain = ActivityCompat.shouldShowRequestPermissionRationale(
    activity,
    Manifest.permission.ACCESS_FINE_LOCATION
)
if (shouldExplain) {
    // show a dialog: "We use your location to find nearby stores"
}

Mit einer dauerhaften Ablehnung umgehen

Wenn der Benutzer Nicht mehr fragen auswählt (oder zweimal ablehnt), zeigt das System den Dialog nicht mehr an. Ihre einzige Möglichkeit besteht dann darin, den Benutzer zu den App-Einstellungen zu schicken, damit er die Berechtigung manuell aktiviert.

import android.content.Intent
import android.provider.Settings
import android.net.Uri

fun openAppSettings(context: Context) {
    val intent = Intent(
        Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
        Uri.fromParts("package", context.packageName, null)
    )
    context.startActivity(intent)
}

Accompanist Permissions verwenden

Die Bibliothek accompanist-permissions verpackt all dies in einen Compose-freundlichen Zustand. rememberMultiplePermissionsState verfolgt den Erteilungsstatus und stellt den Aufruf launchMultiplePermissionRequest() bereit.

import com.google.accompanist.permissions.rememberMultiplePermissionsState

val permissions = rememberMultiplePermissionsState(
    listOf(
        Manifest.permission.ACCESS_FINE_LOCATION,
        Manifest.permission.ACCESS_COARSE_LOCATION
    )
)

if (permissions.allPermissionsGranted) {
    // show the map / read location
} else {
    Button(onClick = { permissions.launchMultiplePermissionRequest() }) {
        Text("Grant location")
    }
}

Regeln für Standortzugriff im Hintergrund

Der Standortzugriff im Hintergrund erfordert einen zweistufigen Ablauf: Gewähren Sie zuerst den Zugriff im Vordergrund (präzise/ungefähre Position) und fordern Sie anschließend separat ACCESS_BACKGROUND_LOCATION an. Dadurch werden ab Android 11 die Systemeinstellungen geöffnet. Der Play Store verlangt eine klare Begründung und eine Datenschutzerklärung.

Fordern Sie diese Berechtigung nur an, wenn Ihre App tatsächlich den Standort benötigt, während sie geschlossen ist – etwa für Geofencing oder Fitness-Tracking.

// Step 1: request foreground first and confirm it's granted.
// Step 2: only then request background:
launcher.launch(
    arrayOf(Manifest.permission.ACCESS_BACKGROUND_LOCATION)
)
// On Android 11+ this sends the user to settings to pick "Allow all the time".

Eine durch Berechtigungen geschützte Karte

Führen Sie alles zusammen: Machen Sie die Anzeige der Karte vom Berechtigungsstatus abhängig. Zeigen Sie die Karte erst an, wenn die Berechtigung erteilt wurde. Andernfalls zeigen Sie eine Aufforderung zur Erteilung der Berechtigung an. Dies ist das gängige und respektvolle Vorgehen gegenüber den Nutzenden.

@Composable
fun LocationGate(permissions: MultiplePermissionsState) {
    when {
        permissions.allPermissionsGranted -> MapScreen()
        else -> Column {
            Text("We need location to show nearby places.")
            Button(onClick = { permissions.launchMultiplePermissionRequest() }) {
                Text("Allow location")
            }
        }
    }
}

Kurze Überprüfung

Seit Android 12 kann eine Person statt des präzisen Standorts den ungefähren Standort auswählen. Was bedeutet das für Ihre Berechtigungsanfrage?

Zusammenfassung

Sie wissen jetzt, wie Sie verantwortungsvoll nach dem Standortzugriff fragen:

  • Deklarieren Sie den Zugriff auf ungefähre/präzise Standorte (und den Hintergrundzugriff nur bei zwingendem Bedarf) im Manifest.
  • Fordern Sie die Berechtigung zur Laufzeit mit den Activity Result APIs oder accompanist-permissions an.
  • Fordern Sie den Zugriff auf präzise und ungefähre Standorte gemeinsam an, damit der Umschalter zwischen präzisem und ungefährem Standort unterstützt wird.
  • Zeigen Sie eine Begründung an und leiten Sie Personen, die die Berechtigung dauerhaft verweigert haben, zu den App-Einstellungen weiter.
  • Behandeln Sie den Standortzugriff im Hintergrund als separaten, begründeten, zweistufigen Ablauf.

Damit ist Maps & Location Services abgeschlossen – Sie können eine Karte anzeigen, den Standort der Person ermitteln, Markierungen platzieren und korrekt nach Berechtigungen fragen.

Häufig gestellte Fragen

Ist die Lektion „Standortberechtigungen richtig umsetzen“ kostenlos?

Ja — der vollständige Text von „Standortberechtigungen richtig umsetzen“ 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 „Standortberechtigungen richtig umsetzen“?

Standort im Vordergrund und präziser Standort 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 4 von 4.

Wie lange dauert die Lektion „Standortberechtigungen richtig umsetzen“?

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