Android'de kullanıcı konum bilgilerini istemenin birden fazla yolu vardır ve en iyi yöntem, kullanım alanına göre değişir. Bu kılavuzda, farklı konuma erişim senaryoları açıklanmakta ve her durumda konum izinlerinin nasıl isteneceğine dair bilgi verilmektedir.
Başlamak için tüm çalışma zamanında istenen izinler ile ilgili en iyi uygulamaları ve izin isteklerini en aza indirme ile ilgili daha kapsamlı kılavuzu inceleyin.
Konum erişimi türleri
Her izin, aşağıdaki özelliklerin bir kombinasyonuna sahiptir:
- Kategori: Ön planda konum veya arka planda konum.
- Doğruluk: Tam konum veya yaklaşık konum.
Ön planda konum
Uygulamanızda konum bilgisini yalnızca bir kez veya belirli bir süre boyunca paylaşan ya da alan bir özellik varsa bu özellik ön planda konum erişimi gerektirir. Aşağıda konuyla ilgili olarak bazı örnekler verilmiştir:
- Bir navigasyon uygulamasındaki özellik, kullanıcıların adım adım yol tarifi almasına olanak tanır.
- 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şiyorsa sistem, uygulamanızın ön planda konum kullandığını varsayar:
- Uygulamanıza ait bir etkinlik görünür durumdadır.
Uygulamanızda ön plan hizmeti çalışıyor. Bir ön plan hizmeti çalışırken sistem, kalıcı bir bildirim göstererek kullanıcı 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 devam eder.
Ayrıca, aşağıdaki kod snippet'inde gösterildiği gibi ön plan hizmet türünü
locationolarak tanımlamanız gerekir. Android 10 (API düzeyi 29) ve sonraki sürümlerde bu ön plan hizmet 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 veya ACCESS_FINE_LOCATION iznini istediğinde ön planda konum erişimine ihtiyaç duyduğunu beyan etmiş olursunuz:
<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>
Tek seferlik erişim Bazı kullanım alanlarında, ön planda konum verilerine erişmenin yanı sıra, uygulama kullanımı boyunca sürekli güncelleme yapmak yerine yalnızca uygulama deneyiminin belirli noktalarında kullanıcı konumuna erişme ihtiyacı duyulur. Bu gibi durumlarda uygulamalar, uygulamanın ilgili oturumu için konum erişimi istemek üzere konum düğmesini kullanmalıdır. Ayrıca, uygulamanız Android 17 (API düzeyi 37) veya sonraki sürümleri hedefliyorsa ve yalnızca oturuma dayalı konum erişimi gerektiren özellikler içeriyorsa Google Play politika koşulları uyarınca konum düğmesini kullanmanız gerekir. Daha fazla bilgi için konum düğmesi politikasına bakın.
Arka planda konum
Uygulama içindeki bir özellik, konumu diğer kullanıcılarla sürekli olarak paylaşıyorsa veya Geofencing API'yi kullanıyorsa uygulamanın arka planda konum erişimine ihtiyacı vardır. Örnek olarak aşağıdakileri gösterebiliriz:
- Aile konum paylaşımı uygulamasındaki bir özellik, kullanıcıların aile üyeleriyle sürekli konum paylaşmasına olanak tanıyor.
- Bir IoT uygulamasındaki ö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ıyor.
Uygulamanız, cihazın mevcut konumuna ön planda konum bölümünde açıklanan durumlar dışında herhangi bir durumda erişiyorsa sistem, uygulamanızın arka planda konum kullandığını varsayar. Arka plan konum hassasiyeti, ön plan konum hassasiyeti ile aynıdır. Bu hassasiyet, uygulamanızın beyan ettiği konum izinlerine bağlıdır.
Android 10 (API düzeyi 29) ve sonraki sürümlerde, çalışma zamanında arka planda konum erişimi istemek için uygulamanızın manifest dosyasında ACCESS_BACKGROUND_LOCATION iznini beyan etmeniz gerekir. Android'in önceki sürümlerinde, uygulamanız ön planda konum erişimi aldığında otomatik olarak arka planda konum erişimi de 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ın tahmini konumunu sağlar. Bu konum tahmini
LocationManagerServiceveyaFusedLocationProvidertarafından yapıldıysa yaklaşık 3 kilometrekarelik (yaklaşık 1, 2 mil kare) bir alan içinde doğru sonuç verir.ACCESS_COARSE_LOCATIONiznini beyan edipACCESS_FINE_LOCATIONiznini beyan etmediğinizde uygulamanız bu doğruluk düzeyinde konum bilgisi alabilir. - Hassas
- Mümkün olduğunca doğru bir cihaz konumu tahmini sağlar.
Konum tahmini
LocationManagerServiceveyaFusedLocationProvidertarafından yapılıyorsa bu tahmin genellikle yaklaşık 50 metre (160 fit) içindedir ve bazen birkaç metre (10 fit) veya daha iyi bir doğruluk oranına sahiptir.ACCESS_FINE_LOCATIONiznini beyan ettiğinizde uygulamanız bu doğruluk düzeyinde konum bilgisi 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.
Uygulamanız, kullanıcı yalnızca yaklaşık konum erişimi izni verdiğinde de çalışmalıdır. Uygulamanızdaki bir özellik, ACCESS_FINE_LOCATION iznini kullanarak 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ı arka planda konum erişimi izni verdikten 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. Şekil 8'de örnek bir bildirim gösterilmektedir.
Uygulamanızın SDK bağımlılıklarında konumla ilgili koşulları kontrol etme
Uygulamanızın, konum izinlerine (özellikle de ACCESS_FINE_LOCATION iznine) 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 başlıklı blog yayınını inceleyin.
Ek kaynaklar
Android'deki konum izinleri hakkında daha fazla bilgi için aşağıdaki materyalleri inceleyin:
Codelab uygulamaları
Videolar
Örnekler
- Konum izinlerinin kullanımını gösteren örnek uygulama