Przycisk lokalizacji na Androidzie to konfigurowalny element interfejsu systemu, który upraszcza wysyłanie próśb o dostęp do dokładnej lokalizacji ograniczonej do sesji. Przycisk ten inicjuje żądania lokalizacji za pomocą bezpośredniego działania użytkownika, co zwiększa prywatność użytkowników i zmniejsza uciążliwość powtarzających się okien z prośbą o uprawnienia, które zwykle pojawiają się w przypadku tymczasowych uprawnień „Tylko tym razem”.
Jeśli Twoja aplikacja jest kierowana na Androida 17 (interfejs API na poziomie 37) lub nowszego i zawiera tylko funkcje, które do działania wymagają dostępu do lokalizacji w ramach sesji, zgodnie z zasadami Google Play musisz używać przycisku lokalizacji. Więcej informacji znajdziesz w zasadach dotyczących przycisku lokalizacji.
Kiedy używać przycisku lokalizacji
Używaj przycisku lokalizacji w przypadku funkcji, które wymagają chwilowego dostępu do dokładnej lokalizacji w ramach sesji. Jest to idealne rozwiązanie dla aplikacji, które nie wymagają stałego dostępu do lokalizacji i mają na celu ograniczenie powtarzających się próśb o uprawnienia „Tylko tym razem”.
Typowe przypadki użycia:
- Funkcje „Szukaj w pobliżu”: znajdowanie hoteli, sklepów lub restauracji w pobliżu.
- Udostępnianie lokalizacji: jednorazowe udostępnianie bieżącej lokalizacji znajomym lub rodzinie.
- Media społecznościowe: zameldowania lub oznaczanie lokalizacji.
- E-commerce: automatyczne wypełnianie adresu dostawy.
Dostosowywanie interfejsu
Aby przycisk pasował do estetyki aplikacji, ale jednocześnie był rozpoznawalny, możesz zmodyfikować te elementy wizualne:
- Schemat kolorów tła i ikony.
- Styl, rozmiar i kształt obramowania.
- Etykiety tekstowe z predefiniowanej listy (np. „Użyj dokładnej lokalizacji”, „Udostępnij dokładną lokalizację”).
Implementowanie przycisku lokalizacji
Aby zintegrować przycisk lokalizacji, użyj biblioteki Jetpack. Ta biblioteka upraszcza konfigurację, obsługuje bezpieczne renderowanie na nowszych platformach i zapewnia rezerwę dla aplikacji kierowanych na Androida 16 i starsze wersje.
Krok 1. Zadeklaruj uprawnienia w pliku AndroidManifest
Musisz zadeklarować standardowe uprawnienia do lokalizacji oraz specjalne uprawnienie USE_LOCATION_BUTTON wymagane przez usługę zdalnego renderowania systemu.
<?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>
Krok 2. Zaimplementuj element kompozycyjny Kotlin
Poniżej znajdziesz przykładową implementację przycisku lokalizacji, w tym przykłady użycia dostępnych opcji dostosowywania, które pozwalają dopasować interfejs do reszty aplikacji.
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) */ ) }
Krok 3. Obsłuż zgodność wsteczną
Biblioteka Jetpack automatycznie obsługuje zgodność wsteczną w starszych wersjach Androida. Na urządzeniach z Androidem 16 lub starszym biblioteka wraca do komponentu renderowanego lokalnie, który zachowuje dostosowany układ wizualny, ale wraca do wywoływania standardowego monitu o dostęp do lokalizacji.
Dzięki temu podejściu możesz korzystać z zalet przycisku lokalizacji bez konieczności utrzymywania równoległego rozwiązania dla urządzeń z Androidem 16 lub starszym.