Konum izinleri isteyin

Konum hizmetlerini kullanan uygulamalar, kullanıcı gizliliğini korumak için konum izinleri istemelidir.

Konumla ilgili birden fazla izin vardır. Hangi izinleri ve nasıl istediğiniz, uygulamanızın kullanım alanıyla ilgili konum şartlarına bağlıdır.

Bu sayfada, farklı konum şartları açıklanmakta ve her durumda konum izinlerinin nasıl isteneceği anlatılmaktadır.

Konum izni istemek için tüm çalışma zamanı izinleriyle ilgili en iyi uygulamaları izleyin.

Konum erişimi türleri

Her iznin aşağıdaki özelliklerin bir kombinasyonu vardır:

Ön planda konum

Uygulamanızda konum bilgilerini yalnızca bir kez veya belirli bir süre boyunca paylaşan ya da alan bir özellik varsa bu özellik için ön planda konum erişimi gerekir. Örnek olarak aşağıdakiler verilebilir:

  • Bir navigasyon uygulamasındaki bir özellik, kullanıcıların adım adım yol tarifi almasına olanak tanır.
  • Bir mesajlaşma uygulamasındaki özellik, kullanıcıların mevcut konumlarını başka bir kullanıcıyla paylaşmalarına olanak tanıyor.

Uygulamanızın bir özelliği aşağıdaki durumlardan birinde cihazın mevcut konumuna erişirse sistem, uygulamanızın ön planda konum kullandığını kabul eder:

  • Uygulamanıza ait bir etkinlik görünür.
  • Uygulamanız ön plan hizmeti çalıştırıyor. Bir ön plan hizmeti çalışırken sistem, kalıcı bir bildirim göstererek kullanıcıların farkındalığını artırır. Uygulamanız arka plana alındığında (ör. kullanıcı cihazındaki Ana Sayfa düğmesine bastığında veya cihazının ekranını kapattığında) erişimi korur.

    Ayrıca, aşağıdaki kod snippet'inde gösterildiği gibi ön plan hizmeti türü beyan etmeniz gerekir.location Android 10 (API düzeyi 29) ve sonraki sürümlerde bu ön plan hizmeti türünü beyan etmeniz gerekir.

    <!-- Recommended for Android 9 (API level 28) and lower. -->
    <!-- Required for Android 10 (API level 29) and higher. -->
    <service
        android:name="MyNavigationService"
        android:foregroundServiceType="location" ... >
        <!-- Any inner elements would go here. -->
    </service>
    

Uygulamanız aşağıdaki snippet'te gösterildiği gibi ACCESS_COARSE_LOCATION iznini veya ACCESS_FINE_LOCATION iznini istediğinde ön planda konum iznine ihtiyaç duyduğunu beyan edersiniz:

<manifest ... >
  <!-- Always include this permission -->
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

  <!-- Include only if your app benefits from precise location access. -->
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
</manifest>

Arka planda konum

Uygulamadaki bir özellik sürekli olarak konum paylaşımı yapıyorsa veya Geofencing API'yi kullanıyorsa uygulamanın arka planda konum erişimi istemesi gerekir. Aşağıda birkaç örnek verilmiştir:

  • Aile konum paylaşımı uygulamasındaki bir özellik, kullanıcıların konumlarını aile üyeleriyle sürekli olarak paylaşmalarına olanak tanır.
  • Bir IoT uygulamasındaki bir özellik, kullanıcıların ev cihazlarını evden ayrıldıklarında kapanacak ve eve döndüklerinde tekrar açılacak şekilde yapılandırmasına olanak tanır.

Sistem, uygulamanızın ön planda konum bölümünde açıklanan durumlar dışında herhangi bir durumda cihazın mevcut konumuna erişmesi halinde arka planda konum kullandığını kabul eder. Arka plan konumunun hassasiyeti, uygulamanızın bildirdiği konum izinlerine bağlı olan ön plan konumunun hassasiyetiyle aynıdır.

Android 10 (API düzeyi 29) ve sonraki sürümlerde, çalışma zamanında ACCESS_BACKGROUND_LOCATION iznini uygulamanızın manifest dosyasında tanımlamanız gerekir. Aksi takdirde arka planda konum erişimi isteğinde bulunamazsınız. Android'in önceki sürümlerinde, uygulamanız ön planda konum erişimi aldığında arka planda konum erişimi de otomatik olarak alır.

<manifest ... >
  <!-- Required only when requesting background location access on
       Android 10 (API level 29) and higher. -->
  <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
</manifest>

Doğruluk

Android, aşağıdaki konum doğruluğu düzeylerini destekler:

Yaklaşık
Cihaz konum tahmini sağlar. Bu konum tahmini LocationManagerService veya FusedLocationProvider'den geliyorsa yaklaşık 3 kilometrekarelik (yaklaşık 1, 2 mil kare) bir alan içinde doğrudur. ACCESS_COARSE_LOCATION iznini bildirip ACCESS_FINE_LOCATION iznini bildirmediğinizde uygulamanız bu doğruluk düzeyinde konumlar alabilir.
Tam
Cihaz konumunu mümkün olduğunca doğru tahmin eder. Konum tahmini LocationManagerService veya FusedLocationProvider kaynaklıysa bu tahmin genellikle yaklaşık 50 metre (160 feet) içinde olur ve bazen birkaç metre (10 feet) veya daha iyi bir doğrulukla yapılabilir. ACCESS_FINE_LOCATION iznini bildirdiğinizde uygulamanız bu doğruluk düzeyinde konumlar alabilir.

Kullanıcı yaklaşık konum izni verirse uygulamanızın hangi konum izinlerini beyan ettiğine bakılmaksızın yalnızca yaklaşık konuma erişebilir.

Uygulamanız, kullanıcı yalnızca yaklaşık konum erişimi verdiğinde de çalışmaya devam etmelidir. Uygulamanızdaki bir özellik, ACCESS_FINE_LOCATION izni kullanılarak tam konuma erişmeyi kesinlikle gerektiriyorsa kullanıcıdan uygulamanızın tam konuma erişmesine izin vermesini isteyebilirsiniz.

Arka planda konum izni hatırlatıcısı

Android 10 (API düzeyi 29) ve sonraki sürümlerde, uygulamanızdaki bir özellik kullanıcının arka planda konum erişimi izni vermesinden sonra ilk kez arka planda cihaz konumuna eriştiğinde sistem, kullanıcıya gönderilecek bir bildirim planlar. Bu bildirim, kullanıcıya uygulamanızın cihaz konumuna her zaman erişmesine izin verdiğini hatırlatır. Örnek bir bildirim Şekil 8'de gösterilmektedir.

Uygulamanızın SDK bağımlılıklarında konum şartlarını kontrol etme

Uygulamanızın, konum izinlerine (özellikle ACCESS_FINE_LOCATION izni) bağlı SDK'lar kullanıp kullanmadığını kontrol edin. Daha fazla bilgi için Medium'daki Getting to know the behaviors of your SDK dependencies (SDK bağımlılıklarınızın davranışlarını tanıma) blog yayınını okuyun.

Ek kaynaklar

Android'deki konum izinleri hakkında daha fazla bilgi için aşağıdaki materyallere göz atın:

Codelab uygulamaları

Videolar

Örnekler