0Pricing
Android Academy · Ders

Konum İzinlerini Doğru Yönetme

Ön planda ve kesin konum bilgisi.

Konum İzinlerini Doğru Yönetme, CoddyKit'te ücretsiz bir Android Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Android Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Android Academy kursu toplamda 4 dersten oluşur.

İzinler İsteğe Bağlı Değildir

Konum, Android'in en hassas izinlerinden biridir. İzni manifest dosyasında bildirmek yeterli değildir; modern Android'de kullanıcıdan çalışma zamanında istemeniz ve her yanıtı uygun şekilde işlemeniz gerekir.

Bu derste izin düzeyleri, Compose içinde izin isteme, ret yanıtlarını işleme ve yeni kesin ve yaklaşık konum ile arka plan kuralları ele alınır.

Üç Konum İzni

Android, konumu düzeylere ayırır:

  • ACCESS_COARSE_LOCATION — yaklaşık (yaklaşık bir şehir bloğu).
  • ACCESS_FINE_LOCATION — kesin (GPS düzeyinde).
  • ACCESS_BACKGROUND_LOCATION — uygulamanız ön planda değilken erişim.

Yalnızca gerçekten ihtiyaç duyduğunuz izinleri isteyin. Arka plan erişimi, Play Store'da ek incelemeye tabi tutulur.

<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" />

Compose İçinde İzin İsteme

Activity Result API'leri, izin iletişim kutuları için bir başlatıcı sağlar. Compose içinde RequestMultiplePermissions sözleşmesiyle birlikte rememberLauncherForActivityResult kullanın.

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
}

İsteği Başlatma

İzinler dizisiyle launch() işlevini çağırarak iletişim kutusunu açın. Bu işlemi genellikle ekran yüklenirken otomatik olarak değil, bir düğmeye dokunulmasına yanıt olarak gerçekleştirin.

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

İznin Zaten Verilip Verilmediğini Denetleme

İzin zaten verildiyse yeniden istemeyin. İsteği başlatmadan önce ContextCompat.checkSelfPermission ile denetleyin.

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
}

Kesin ve Yaklaşık Konum

Android 12'den (API 31) itibaren kullanıcılar, kesin konum isteseniz bile yaklaşık konum izni verebilir. Bu nedenle hem kesin hem de yaklaşık konumu birlikte istemeli ve kullanıcının izni yaklaşık konuma düşürebileceğini kabul etmelisiniz.

Mümkün olduğunda özelliğinizi yaklaşık konumla da kabul edilebilir şekilde çalışacak biçimde tasarlayın.

// 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.

Gerekçe Gösterme

Kullanıcı bir kez reddederse Android, shouldShowRequestPermissionRationale denetimini yapmanıza izin verir. Bu değer doğru olduğunda, yeniden istemeden önce konuma neden ihtiyaç duyduğunuzu açıklayan anlaşılır bir mesaj gösterin.

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"
}

Kalıcı Reddi İşleme

Kullanıcı Bir daha sorma seçeneğini belirlerse (veya iki kez reddederse) sistem iletişim kutusunu artık göstermez. Tek seçeneğiniz, izni el ile etkinleştirmesi için kullanıcıyı uygulama ayarlarına göndermektir.

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 Kullanımı

accompanist-permissions kitaplığı, tüm bu işlemleri Compose dostu bir durumda sarmalar. rememberMultiplePermissionsState verilen izinlerin durumunu izler ve bir launchMultiplePermissionRequest() çağrısı sunar.

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")
    }
}

Arka Plan Konum Kuralları

Arka planda konum kullanımı iki adımlı bir akış gerektirir: önce ön plan konum iznini (kesin/kaba), ardından ayrı olarak Android 11 ve sonraki sürümlerde sistem ayarlarını açan ACCESS_BACKGROUND_LOCATION iznini isteyin. Play Store, açık bir gerekçe ve gizlilik politikası talep eder.

Bu izni yalnızca uygulamanız kapalıyken gerçekten konuma ihtiyaç duyuyorsa (coğrafi çitler, fitness takibi vb.) isteyin.

// 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".

İzinle Korumalı Bir Harita

Her şeyi bir araya getirin: haritayı izin durumuna göre erişilebilir hâle getirin. Haritayı yalnızca izin verildikten sonra gösterin; aksi durumda bir izin istemi gösterin. Bu, standart ve kullanıcıya saygılı yaklaşımdır.

@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")
            }
        }
    }
}

Kısa Kontrol

Android 12'den bu yana kullanıcı, Kesin konum yerine Yaklaşık konumu seçebilir. Bu, izninizi istemeniz açısından ne anlama gelir?

Özet

Artık konum iznini sorumlu bir şekilde nasıl isteyeceğinizi biliyorsunuz:

  • Bildirim dosyasında kaba/kesin konum izinlerini (arka plan konumunu yalnızca gerekliyse) tanımlayın.
  • Çalışma zamanında Activity Result API'leri veya accompanist-permissions ile isteyin.
  • Kesin/yaklaşık seçimini desteklemek için kesin ve kaba konum izinlerini birlikte isteyin.
  • Gerekçeyi gösterin ve kalıcı olarak reddeden kullanıcıları uygulama ayarlarına yönlendirin.
  • Arka plan konumunu ayrı ve gerekçelendirilmiş iki adımlı bir akış olarak ele alın.

Haritalar ve Konum Hizmetleri bölümü tamamlandı. Artık bir harita gösterebilir, kullanıcıyı bulabilir, işaretçiler yerleştirebilir ve izni doğru şekilde isteyebilirsiniz.

Sıkça Sorulan Sorular

“Konum İzinlerini Doğru Yönetme” dersi ücretsiz mi?

Evet — “Konum İzinlerini Doğru Yönetme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Android Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Android Academy kursu toplamda 4 dersten oluşur.

“Konum İzinlerini Doğru Yönetme” dersinde ne öğreneceğim?

Ön planda ve kesin konum bilgisi. Android Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Android Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Android Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Konum İzinlerini Doğru Yönetme” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Android Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Android Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Harita Gösterme
  2. Kullanıcının Konumunu Alma
  3. İşaretçiler ve Kamera
  4. Konum İzinlerini Doğru Yönetme
← Android Academy Sayfasına Dön