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-permissionsan. - 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
- Eine Karte anzeigen
- Den Standort des Benutzers abrufen
- Marker und Kamera
- Standortberechtigungen richtig umsetzen