Konum izinleri isteyin

Kullanıcı gizliliğini korumak için konum hizmetlerini kullanan uygulamaların konum izinleri istemesi gerekir.

Konumla ilgili birden fazla izin vardır. Hangi izinleri istediğiniz ve bunları nasıl istediğiniz, uygulamanızın kullanım alanı için konum koşullarına bağlıdır.

Bu sayfada, farklı konum şartı türleri ve her durumda konum izinlerinin nasıl isteneceği açıklanmaktadır.

Konum izni istemek için tüm çalışma anı izinleriyle ilgili en iyi uygulamaları uygulayın.

Konum erişimi türleri

Her izin, aşağıdaki özelliklerin bir kombinasyonuna sahiptir:

Ön plan konumu

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. Buna örnek olarak aşağıdakiler verilebilir:

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

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

  • Uygulamanıza ait bir etkinlik görünür.
  • Uygulamanız bir ön plan hizmeti çalıştırıyor. Bir ön plan hizmeti çalışırken sistem, kalıcı bir bildirim göstererek kullanıcının dikkatini çeker. Kullanıcı cihazındaki Ana ekran düğmesine bastığında veya cihazının ekranını kapattığında uygulamanız arka plana yerleştirildiğinde erişimi korur.

    Ayrıca, aşağıdaki kod snippet'inde gösterildiği gibi location ön plan hizmet türü belirtmeniz gerekir. Android 10 (API düzeyi 29) ve sonraki sürümlerde bu ön plan hizmet türünü bildirmeniz 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 ACCESS_COARSE_LOCATION veya ACCESS_FINE_LOCATION iznini istediğinde aşağıdaki snippet'te gösterildiği gibi ön planda konum izni gerektiğini 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 konumu diğer kullanıcılarla paylaşıyorsa veya Coğrafi sınırlama API'sini kullanıyorsa uygulamanın arka planda konum erişimi olması gerekir. Aşağıda konuyla ilgili olarak bazı örnekler verilmiştir:

  • Bir aile konum paylaşımı uygulamasında, kullanıcıların konumu aile üyeleriyle sürekli olarak paylaşmasına olanak tanıyan bir özellik.
  • Bir IoT uygulamasındaki bir özellik, kullanıcıların ev cihazlarını, kullanıcı evden çıktığında kapanacak ve eve döndüğünde tekrar açılacak şekilde yapılandırmasına olanak tanır.

Sistem, ön planda konum bölümünde açıklanan durumlar dışındaki herhangi bir durumda cihazın mevcut konumuna erişirse uygulamanızın arka planda konum bilgisi kullandığını düşünür. Arka planda konum doğruluğu, uygulamanızın belirttiği konum izinlerine bağlı olan ön planda konum doğruluğu ile aynıdır.

Android 10 (API düzeyi 29) ve sonraki sürümlerde, çalışma zamanında arka planda konum erişimi isteğinde bulunmak için uygulamanızın manifest dosyasında ACCESS_BACKGROUND_LOCATION iznini belirtmeniz gerekir. Android'in önceki sürümlerinde, uygulamanız ön planda konum erişimi aldığında arka planda konum erişimini 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 konumu tahmini sağlar. Bu konum tahmini LocationManagerService veya FusedLocationProvider kaynaklıysa yaklaşık 3 kilometrekare (yaklaşık 1, 2 mil kare) içinde doğrudur. ACCESS_FINE_LOCATION iznini değil, ACCESS_COARSE_LOCATION iznini belirttiğinizde uygulamanız bu düzeyde doğrulukla konum alabilir.
Tam
Mümkün olduğunca doğru bir cihaz konumu tahmini sağlar. Konum tahmini LocationManagerService veya FusedLocationProvider kaynaklıysa bu tahmin genellikle yaklaşık 50 metre (160 inç) içindedir ve bazen birkaç metre (3, 3 inç) veya daha iyi bir doğrulukla tahmin edilir. ACCESS_FINE_LOCATION iznini belirttiğinizde uygulamanız bu düzeyde doğrulukla konum alabilir.

Kullanıcı yaklaşık konum izni verirse uygulamanız, beyan ettiği konum izinlerinden bağımsız olarak yalnızca yaklaşık konuma erişebilir.

Kullanıcı yalnızca yaklaşık konum erişimi verdiğinde uygulamanız çalışmaya devam eder. Uygulamanızdaki bir özellik için ACCESS_FINE_LOCATION izni kullanılarak tam konuma erişilmesi kesinlikle gerekiyorsa 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ı arka planda konum erişimi verdikten sonra arka planda cihaz konumuna ilk kez 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. Şekil 8'de örnek bir bildirim gösterilmektedir.

Uygulamanızın SDK bağımlılıklarına ilişkin konum şartlarını kontrol etme

Uygulamanızın, özellikle ACCESS_FINE_LOCATION izni olmak üzere konum izinlerine bağlı SDK'lar kullanıp kullanmadığını kontrol edin. Daha fazla bilgi için Medium'daki 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 materyalleri inceleyin:

Codelab uygulamaları

Videolar

Örnekler