Android konum düğmesi, oturum kapsamlı tam konum erişimi isteğinde bulunma şeklinizi basitleştirmek için tasarlanmış, özelleştirilebilir bir sistem kullanıcı arayüzü öğesidir. Konum isteklerini doğrudan kullanıcı işlemiyle başlatarak kullanıcı gizliliğini artıran bu düğme, genellikle geçici "yalnızca bu sefer" izinleriyle karşılaşılan tekrarlayan izin iletişim kutularının neden olduğu sorunları azaltır.
Uygulamanız Android 17 (API düzeyi 37) veya sonraki sürümleri hedefliyorsa ve yalnızca çalışmak için oturum tabanlı konum erişimi gerektiren özellikler içeriyorsa Google Play Politikası, konum düğmesini kullanmanızı zorunlu kılar. Daha fazla bilgi için konum düğmesi politikasına bakın.
Konum düğmesi ne zaman kullanılır?
Kısa süreli, oturum tabanlı tam konum erişimi gerektiren özellikler için konum düğmesini kullanın. Bu, sürekli konum erişimi gerektirmeyen ve tekrarlayan "Yalnız bu sefer" izin istemlerini azaltmayı amaçlayan uygulamalar için idealdir.
Yaygın kullanım alanları:
- "Yakınımda arama" işlevleri: Yakındaki otelleri, mağazaları veya restoranları bulma
- Konum paylaşımı: Mevcut konumunuzu arkadaşlarınızla veya ailenizle bir kez paylaşma.
- Sosyal medya: Check-in'ler veya konum etiketleme.
- E-ticaret: Teslimatlar için adresin otomatik olarak doldurulması.
Kullanıcı arayüzünü özelleştirme
Düğmenin, uygulamanızın estetiğine uygun olmasını sağlarken tanınabilirliğini korumak için aşağıdaki görsel öğeleri değiştirebilirsiniz:
- Arka plan ve simge renk şeması.
- Anahat stili, boyutu ve şekli.
- Önceden tanımlanmış bir listedeki metin etiketleri (ör. "Tam konumu kullan", "Tam konumu paylaş").
Konum düğmesini uygulama
Konum düğmesini entegre etmek için Jetpack Kitaplığı'nı kullanın. Bu kitaplık, kurulumu basitleştirir, daha yeni platformlarda güvenli oluşturmayı yönetir ve Android 16 ile önceki sürümleri hedefleyen uygulamalar için geri dönüşüm sağlar.
1. adım: Android Manifest'te izinleri beyan edin
Sistemin uzaktan oluşturma hizmeti için gereken özel USE_LOCATION_BUTTON izniyle birlikte standart konum izinlerini beyan etmeniz gerekir.
<?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>
2. adım: Kotlin composable işlevini uygulama
Aşağıda, kullanıcı arayüzünün uygulamanın geri kalanıyla eşleşmesini sağlamak için kullanılabilecek mevcut özelleştirme seçeneklerinin kullanım örnekleri de dahil olmak üzere konum düğmesinin örnek bir uygulaması verilmiştir.
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) */ ) }
3. adım: Geriye dönük uyumluluğu ele alın
Jetpack kitaplığı, Android'in daha eski sürümlerinde geriye dönük uyumluluğu otomatik olarak ele alır. Android 16 veya önceki sürümlerin yüklü olduğu cihazlarda kitaplık, özelleştirilmiş görsel düzeni koruyan ancak standart konum izni istemini tetiklemeye geri dönen yerel olarak oluşturulmuş bir bileşene geri döner.
Bu yaklaşımı kullanarak, Android 16 veya daha eski sürümleri çalıştıran cihazlar için paralel bir çözüm sürdürmeden konum düğmesini kullanmanın avantajlarından yararlanabilirsiniz.