Der Android-Button „Standort“ ist ein anpassbares System-UI-Element, mit dem Sie den Zugriff auf den genauen Standort auf Sitzungsebene einfacher anfordern können. Da Standortanfragen durch eine direkte Nutzeraktion ausgelöst werden, verbessert der Button den Datenschutz und reduziert die Reibung durch wiederholte Berechtigungsdialogfelder, die normalerweise bei temporären Berechtigungen vom Typ „Nur dieses Mal“ auftreten.
Wenn Ihre App auf Android 17 (API-Level 37) oder höher ausgerichtet ist und nur Funktionen enthält, für die ein sitzungsbasierter Standortzugriff erforderlich ist, müssen Sie gemäß den Google Play-Richtlinien den Button „Standort“ verwenden. Weitere Informationen finden Sie unter den Richtlinien zum Button „Standort“.
Wann sollte der Button „Standort“ verwendet werden?
Verwenden Sie den Button „Standort“ für Funktionen, die einen momentanen, sitzungsbasierten Zugriff auf den genauen Standort erfordern. Dies ist ideal für Apps, die keinen dauerhaften Standortzugriff benötigen und wiederholte Berechtigungsaufforderungen vom Typ „Nur dieses Mal“ vermeiden möchten.
Zu den häufigsten Anwendungsfällen gehören:
- Funktionen vom Typ „In meiner Nähe suchen“: Hotels, Geschäfte oder Restaurants in der Nähe finden.
- Standortfreigabe: Ihren aktuellen Standort einmal mit Freunden oder Familienmitgliedern teilen.
- Soziale Medien: Check-ins oder Standort-Tagging.
- E‑Commerce: Automatische Vervollständigung einer Adresse für Lieferungen.
Benutzeroberfläche anpassen
Damit der Button zum Erscheinungsbild Ihrer App passt und gleichzeitig erkennbar bleibt, können Sie die folgenden visuellen Elemente ändern:
- Farbschema für Hintergrund und Symbol.
- Stil, Größe und Form der Umrandung.
- Textlabels aus einer vordefinierten Liste (z.B. „Genauen Standort verwenden“, „Genauen Standort teilen“).
Button „Standort“ implementieren
Verwenden Sie die Jetpack-Bibliothek, um den Button „Standort“ zu integrieren. Diese Bibliothek vereinfacht die Einrichtung, sorgt für sicheres Rendering auf neueren Plattformen und bietet einen Fallback für Apps, die auf Android 16 und niedriger ausgerichtet sind.
Schritt 1: Berechtigungen im Android-Manifest deklarieren
Sie müssen Standardberechtigungen für den Standort zusammen mit der speziellen Berechtigung USE_LOCATION_BUTTON deklarieren, die für den Remote-Renderingdienst des Systems erforderlich ist.
<?xml version="1.0" encoding="utf-8"?> <!-- Copyright 2026 The Android Open Source Project Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <manifest xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 1. Standard Coarse and Fine Location Permissions --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- Optional: If your app is only using the location button to access location, you should add the "onlyForLocationButton" flag shown below to your ACCESS_FINE_LOCATION declaration. <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:usesPermissionFlags="onlyForLocationButton"/> Note: Adding this flag restricts your app from accessing the precise location permission via the broader permission, and that users will be required to use the location button in order to share precise location with the app. This is designed to improve user privacy & trust when granting location access. --> <!-- 2. CRITICAL: Required system permission for rendering the LocationButton --> <uses-permission android:name="android.permission.USE_LOCATION_BUTTON" /> <application android:icon="@mipmap/ic_launcher" android:label="LocationButtonSample" android:theme="@style/Theme.PinPoint"> <activity android:name=".MainActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
Schritt 2: Zusammensetzbare Kotlin-Funktion implementieren
Im Folgenden finden Sie eine Beispielimplementierung des Buttons „Standort“ mit Beispielen für die Verwendung der verfügbaren Anpassungsoptionen, mit denen die Benutzeroberfläche an den Rest der App angepasst werden kann.
import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.width import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp import androidx.core.locationbutton.compose.LocationButton import androidx.core.locationbutton.compose.LocationButtonTextType @Composable fun LocationPermissionScreen(onPermissionGranted: () -> Unit, onPermissionDenied: () -> Unit) { // Renders the secure system-trusted Location Button composable LocationButton( // Callback triggered when the user taps the secure button and makes a decision on the permission dialog onPermissionResult = { isGranted -> if (isGranted) { onPermissionGranted() } else { onPermissionDenied() } }, /* ============================================================================ * VISUAL CUSTOMIZATIONS * Un-comment any of the parameters below to customize the button's aesthetics. * If omitted, the button falls back to secure, high-contrast system defaults. * ============================================================================ */ /* // LABEL TEXT TYPE: // Predefined system strings rendered inside the secure process. // Options: PreciseLocation, UsePreciseLocation, SharePreciseLocation, // NearMyPreciseLocation, or None (for an icon-only button). textType = LocationButtonTextType.UsePreciseLocation, // COLOR PALETTE: // Customize the container background, text label, and icon tint colors. backgroundColor = Color(0xFF00796B), // e.g., Material Teal textColor = Color.White, iconTint = Color(0xFFFFC107), // e.g., Amber icon tint // CORNER RADIUS & SHAPE: // Define the resting corner radius and the morphed radius when pressed. cornerRadius = 24.dp, // Rounded capsule shape pressedCornerRadius = 12.dp, // Morphs to sharper corners on tap // OUTLINE STROKE (BORDERS): // Add a contrasting outline stroke around the button bounds. strokeColor = Color(0xFF004D40), strokeWidth = 2.dp, // INTERACTIVE TOUCH PADDING: // Defines the secure clickable touch target boundary. // Coerced securely by the system between 4.dp and 8.dp. clickablePadding = PaddingValues(6.dp) */ ) }
Schritt 3: Abwärtskompatibilität berücksichtigen
Die Jetpack-Bibliothek sorgt automatisch für Abwärtskompatibilität auf niedrigeren Android-Versionen. Auf Geräten mit Android 16 oder niedriger greift die Bibliothek auf eine lokal gerenderte Komponente zurück, die das angepasste visuelle Layout beibehält, aber wieder die Standardaufforderung zur Berechtigung zur Standortermittlung auslöst.
Mit diesem Ansatz können Sie die Vorteile der Einführung des Buttons „Standort“ nutzen, ohne eine parallele Lösung für Geräte mit Android 16 oder niedriger zu pflegen.