Kullanıcı gizliliğini korumak için, konum hizmetlerini kullanan uygulamalar konum isteğinde bulunmalıdır. izin verir.
Konum izni isteğinde bulunurken sizinle aynı en iyi uygulamaları izleyin diğer tüm çalışma zamanı izinleri için kullanılır. Konum izinleri konusundaki önemli farklardan biri de sistemimizde konumla ilgili birden fazla izin bulunuyor. İzin verdiğiniz izinler ve talep etme şekliniz, web sitenizin konum gereksinimlerine bağlıdır. kullanım alanına sahip olursunuz.
Bu sayfada, farklı türdeki konumlarla ilgili gereksinimler ve her durumda konum izni isteme konusunda yol gösterici bilgiler edinebilirsiniz.
Konum erişimi türleri
Her izin, aşağıdaki özelliklerin bir kombinasyonuna sahiptir:
- Kategori: Ön plan konumu veya arka plan konum ekleyin.
- Doğruluk: Tam konum veya yaklaşık konumdur.
Ön plan konumu
Uygulamanız yalnızca konum bilgilerini paylaşan veya alan bir özellik içeriyorsa bir defa veya belirli bir süre boyunca devam ediyorsa, bu özellik için konum erişimi. Buna örnek olarak aşağıdakiler verilebilir:
- Navigasyon uygulamasındaki bir özellik, kullanıcıların adım adım yol tarifine yol tarifleri alın.
- Mesajlaşma uygulamasındaki bir özellik, kullanıcıların mevcut konumlarını paylaşmalarına olanak tanır gerçekleştirebilirsiniz.
Sistem, uygulamanızın ön planda konumunu kullandığını varsayar: Uygulamanız cihazın mevcut konumuna aşağıdakilerden biri üzerinden erişiyorsa durumlar:
- Uygulamanıza ait etkinlikler görünür durumda.
Uygulamanız bir ön plan hizmeti çalıştırıyor. Bir ön plan hizmeti sistem, sürekli bir bildirim göstererek kullanıcı farkındalığını artırır. Uygulamanız arka plana yerleştirildiğinde (örneğin, Kullanıcı cihazındaki Ana Sayfa düğmesine bastığında veya cihazının ekranını açtığında kapalı.
Ayrıca, bir ön plan hizmeti beyan etmeniz önerilir.
location
değerini alır. Android 10 (API) sürümünde seviye 29) ve sonraki sürümler için 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
ACCESS_COARSE_LOCATION
veya
ACCESS_FINE_LOCATION
izninin değerini değiştirin:
<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
Uygulama içindeki bir özellik varsa arka planda konuma erişmesi gereken uygulamalar konumunu diğer kullanıcılarla sürekli olarak paylaşır veya Coğrafi sınır belirleme API. Aşağıda çeşitli örnekler verilmiştir:
- Aile konum paylaşımı uygulamasındaki bir özellik, kullanıcıların sürekli olarak Aile üyeleriyle konum paylaşmak.
- IoT uygulamasındaki bir özellik, kullanıcıların ev cihazlarını bu ayarları, kullanıcı evden çıkarken kapanıyor ve kullanıcı ana ekrana döner.
Uygulamanız cihazın bulunduğu konumu, ön plan konumu bölümüne bakın. Arka planda konum hassasiyeti: bağlı olan ön plan konum kesinliğiyle aynıdır. Uygulamanızın beyan ettiği konum izinleri.
Android 10 (API düzeyi 29) ve sonraki sürümlerde
ACCESS_BACKGROUND_LOCATION
uygulamanızın manifest dosyasında arka planda konum bilgisi isteme
erişim çalışma zamanında somut olarak ortaya çıkar. Şu sürümün önceki sürümlerinde:
Android, uygulamanız ön planda konuma otomatik olarak eriştiğinde
arka planda konuma 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 konumu tahmini sağlar. Bu konum tahmini,
LocationManagerService
veyaFusedLocationProvider
, bu tahmin, yaklaşık 3 kilometrekare (yaklaşık 1,2 kilometrekare) aralığında mil). Aşağıdakileri yaptığınızda uygulamanız bu doğruluk düzeyinde konumları alabilir:ACCESS_COARSE_LOCATION
iznini beyan eder, ancak izin belirtmezACCESS_FINE_LOCATION
izni. - Tam
- Mümkün olduğunca doğru bir cihaz konum tahmini sağlar. Öğe
konum tahmini
LocationManagerService
veyaFusedLocationProvider
, bu tahmin genellikle yaklaşık 50 metre (160 fit) olur ve bazen en fazla birkaç metrelik hata payı bulunur. Uygulamanız aşağıdakileri alabilir konum bilgileriniACCESS_FINE_LOCATION
bildirdiğinizde bu doğruluk düzeyindeki izni gerekir.
Kullanıcı yaklaşık konum izni verirse, uygulamanız, hangi konumdan bağımsız olarak yalnızca yaklaşık konuma erişebiliyor izin verdiğinizi gösterin.
Kullanıcı yalnızca yaklaşık konum izni verdiğinde uygulamanız çalışmaya devam etmelidir
erişim. Uygulamanızdaki bir özelliğin mutlaka tam konuma erişmesi gerekiyorsa
ACCESS_FINE_LOCATION
iznini kullanarak, kullanıcıdan
uygulamasını kullanın.
Çalışma zamanında konum erişimi iste
Uygulamanızdaki bir özelliğin konum erişimine ihtiyacı olduğunda kullanıcı etkileşimde bulunana kadar bekleyin özellikle kontrol etmelisiniz. Bu iş akışı, Aşağıdaki gibi çalışma zamanında istenen izinleri bağlam içinde isteme ile ilgili en iyi uygulama: uygulama talebinde bulunma işleminin nasıl yapıldığını açıklayan izinleriyle ilgili daha fazla bilgi edinin.
Şekil 1, bu işlemin nasıl gerçekleştirileceğine ilişkin bir örnek göstermektedir. Uygulama, "konumu paylaş" ön planda konuma erişim gerektiren bir özellik. Uygulama kullanıcı konum iznini istemediği sürece Konum paylaş düğmesi.
Kullanıcı yalnızca yaklaşık konum izni verebilir
Android 12 (API düzeyi 31) veya sonraki sürümlerde kullanıcılar
yalnızca yaklaşık konum bilgileri (uygulamanız şu bilgiyi istese bile)
ACCESS_FINE_LOCATION
çalışma zamanında istenen izne tabi değildir.
Bu olası kullanıcı davranışını işlemek için ACCESS_FINE_LOCATION
isteğinde bulunmayın
kabul etmesi gerekir. Bunun yerine, hem ACCESS_FINE_LOCATION
hem de
ve
ACCESS_COARSE_LOCATION
isteği göndermelerine izin verir. Yalnızca
ACCESS_FINE_LOCATION
, sistem bazı sürümlerde isteği yoksayar
Android 12. Uygulamanız Android 12 veya
sistem aşağıdaki hata mesajını
Logcat:
ACCESS_FINE_LOCATION must be requested with ACCESS_COARSE_LOCATION..
Uygulamanız hem ACCESS_FINE_LOCATION
hem de ACCESS_COARSE_LOCATION
istediğinde
sistem izinleri iletişim kutusunda, kullanıcıya ilişkin aşağıdaki seçenekler yer alır:
- Tam: Uygulamanızın tam konum bilgilerini almasını sağlar.
- Yaklaşık: Uygulamanızın yalnızca yaklaşık konum bilgilerini almasına izin verir.
Şekil 3, iletişim kutusunun görsel bir resim kullanıcının seçim yapmasına yardımcı olmak için her iki seçenekte de işaretler vardır. Kullanıcı bir üç düğmeden birine dokunarak düğmenin süresini seçmek için hakkında bilgi edindiniz.
Android 12 ve sonraki sürümlerde kullanıcılar sistem ayarlarına gidebilir söz konusu uygulamanın konumundan bağımsız olarak, uygulama için tercih edilen konum doğruluğunu hedef SDK sürümü. Uygulamanız bir cihazda yüklü olsa bile bu geçerlidir Android 11 veya önceki bir sürümü çalıştırıyorsa ve ardından kullanıcı Android 12 veya sonraki bir sürüme güncelleyin.
Kullanıcı seçimi, verilen izinleri etkiler
Aşağıdaki tabloda sistemin uygulamanıza verdiği izinler gösterilir, kullanıcının izinlerin çalışma zamanı iletişim kutusunda seçtiği seçeneklere göre:
Tam | Yaklaşık | |
---|---|---|
Uygulamayı kullanırken | ACCESS_FINE_LOCATION ACCESS_COARSE_LOCATION |
ACCESS_COARSE_LOCATION |
Yalnız bu sefer | ACCESS_FINE_LOCATION ACCESS_COARSE_LOCATION |
ACCESS_COARSE_LOCATION |
Reddet | Konum izni yok | Konum izni yok |
Sistemin uygulamanıza hangi izinleri verdiğini belirlemek için izin isteğinizin değerini döndürür. Jetpack kitaplıklarını kodda kullanabilirsiniz benzer kitaplıklar kullanabilirsiniz. Kitaplıktaki izin istek kodunu yönetme kendiniz.
Kotlin
val locationPermissionRequest = registerForActivityResult( ActivityResultContracts.RequestMultiplePermissions() ) { permissions -> when { permissions.getOrDefault(Manifest.permission.ACCESS_FINE_LOCATION, false) -> { // Precise location access granted. } permissions.getOrDefault(Manifest.permission.ACCESS_COARSE_LOCATION, false) -> { // Only approximate location access granted. } else -> { // No location access granted. } } } // ... // Before you perform the actual permission request, check whether your app // already has the permissions, and whether your app needs to show a permission // rationale dialog. For more details, see Request permissions. locationPermissionRequest.launch(arrayOf( Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION))
Java
ActivityResultLauncher<String[]> locationPermissionRequest = registerForActivityResult(new ActivityResultContracts .RequestMultiplePermissions(), result -> { Boolean fineLocationGranted = result.getOrDefault( Manifest.permission.ACCESS_FINE_LOCATION, false); Boolean coarseLocationGranted = result.getOrDefault( Manifest.permission.ACCESS_COARSE_LOCATION,false); if (fineLocationGranted != null && fineLocationGranted) { // Precise location access granted. } else if (coarseLocationGranted != null && coarseLocationGranted) { // Only approximate location access granted. } else { // No location access granted. } } ); // ... // Before you perform the actual permission request, check whether your app // already has the permissions, and whether your app needs to show a permission // rationale dialog. For more details, see Request permissions. locationPermissionRequest.launch(new String[] { Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION });
Tam konuma yükseltme isteğinde bulunun
Kullanıcıdan uygulamanızın erişimini yaklaşık konumdan yenisine geçirmesini isteyebilirsiniz
tam konum. Kullanıcıdan uygulamanızın erişimini
Ancak, uygulamanızın kullanım alanının kesinlikle
bu hassasiyet seviyesini gerektirir. Uygulamanızın bir cihazı yakındaki cihazlarla eşlemesi gerekiyorsa
cihaz kullanıyorsanız tamamlayıcı cihaz kullanmayı düşünün
eşleme veya Bluetooth
yerine
ACCESS_FINE_LOCATION
izni isteniyor.
Kullanıcıdan, uygulamanızın konum erişimini yaklaşık olarak yerine geçirmesini istemek için aşağıdakileri yapın:
- Gerekirse uygulamanızın izni gerekir.
ACCESS_FINE_LOCATION
veACCESS_COARSE_LOCATION
izinlerini iste izleyebilirsiniz. Kullanıcı, sistem tarafından izin verilmesine bir gözüktüğünü varsayalım. Bu sefer sistem iletişim kutusu Şekil 4'te gösterilmiştir şekil 5:
Başlangıçta yalnızca ön plan konumunu iste
Uygulamanızdaki bazı özellikler konum erişimi gerektirse bile, uygulamalarınızın Ancak bunlardan yalnızca bazıları arka planda konum erişimi gerektirir. Dolayısıyla, Uygulamanızın konum için artımlı istekler gerçekleştirmesini önerdi ön planda konum erişimi ve ardından arka planda konum izni isteyerek erişim. Artımlı istekler gerçekleştirerek kullanıcılarınıza daha fazla kontrol daha iyi anlamalarını sağlar. Bu sayede, uygulamanızda hangi özelliklerin arka planda konum erişimi.
Şekil 6'da, artımlı e-tablo gibi ek yüklemelerle ilgili kabul edersiniz. Hem "mevcut konumu göster" hem de ve "yakındaki yerleri öner" ön planda konum erişimi gerektiriyor. Yalnızca "yakındaki yerleri öner" Ancak bu özellik için arka planda konum erişimi gerekir.
Artımlı istekler gerçekleştirme süreci aşağıdaki gibidir:
-
Uygulamanız başta kullanıcıları, satın alma işlemi gerçekleştirmeleri için gereken "konumu paylaş" gibi ön planda konum erişimi Şekil 1'deki özellik veya "mevcut konumu göster" Şekil 2'deki bir özelliktir.
Önerilen özellikler için kullanıcı erişimini devre dışı bırakmanız Uygulamanızın ön planda konumu olana kadar arka planda konum erişimi erişim.
-
Daha sonra, kullanıcı başka bir uygulama için gereken konum erişimine sahip kullanıcılar için arka planda konum isteme erişim.
Gerekirse arka planda konum bilgisini iste
İzin iletişim kutusu içeriği, hedef SDK sürümüne bağlıdır
Uygulamanızdaki bir özellik, çalışan bir cihazda arka planda konum erişimi istediğinde Android 10 (API düzeyi 29), sistem izinleri iletişim kutusunda bir seçenek bulunur Her zaman izin ver olarak adlandırılmıştır. Kullanıcı bu seçeneği belirlerse, Uygulamanız arka planda konuma erişebilir.
Ancak Android 11 (API düzeyi 30) ve sonraki sürümlerde sistem iletişim kutusu Her zaman izin ver seçeneğini ekleyin. Bunun yerine, kullanıcıların konumu (Şekil 7'de gösterildiği gibi) seçin.
En iyi uygulamaları izleyerek kullanıcıların bu ayarlar sayfasına gitmesine yardımcı olabilirsiniz. arka planda konum izni istenir. İzin süreci izni, uygulamanızın hedef SDK sürümüne bağlıdır.
Uygulama Android 11 veya sonraki sürümleri hedefliyor
Uygulamanıza ACCESS_BACKGROUND_LOCATION
izni verilmediyse ve
shouldShowRequestPermissionRationale()
true
değerini döndürür, kullanıcılara aşağıdakileri içeren bir eğitim amaçlı kullanıcı arayüzü gösterir:
- Uygulamanızın özelliğinin arka plana neden erişmesi gerektiğine dair net bir açıklama konum.
- Arka planda konum izni veren ayarlar seçeneğinin kullanıcı tarafından görülebilen etiketi
(örneğin, Şekil 7'de Her zaman izin ver). Şu numarayı arayabilirsiniz:
getBackgroundPermissionOptionLabel()
ve bu etiketi almak için. Bu yöntemin döndürülen değeri, kullanıcının cihaz dil tercihini belirtin. - Kullanıcıların izni reddetmesi için sunulan bir seçenek. Kullanıcılar arka planı reddederse uygulamanızı kullanmaya devam edebilmeleri gerekir.
Uygulama Android 10 veya önceki sürümleri hedefliyor
Uygulamanızdaki bir özellik arka planda konum erişimi istediğinde kullanıcılar sistem iletişim kutusu. Bu iletişim kutusunda, uygulamanızın konumuna gitmek için kullanabileceğiniz bir seçenek bulunur ayarları sayfasında görebilirsiniz.
Uygulamanız konum istemeyle ilgili en iyi uygulamaları takip ettiği sürece bu davranışı desteklemek için herhangi bir değişiklik yapmanız gerekmez.
Kullanıcı arka planda konum doğruluğunu etkileyebilir
Kullanıcı yaklaşık konum isterse kullanıcının
konum izinleri iletişim kutusundaki seçenekler arka planda konum için de geçerlidir. İçinde
Yani kullanıcı, uygulamanıza ACCESS_BACKGROUND_LOCATION
izni verirse
izin verir ancak ön planda yalnızca yaklaşık konum erişimi verir.
uygulaması arka planda da yalnızca yaklaşık konum erişimine sahip olur.
Arka planda konum izniyle ilgili hatırlatma
Android 10 ve sonraki sürümlerde, uygulamanızdaki bir özellik Kullanıcı arka planda konum izni verdikten sonra ilk kez arka planda sistem, kullanıcıya gönderilmesi için bir bildirim planlar. Bu bildirim, uygulamanın cihaza erişmesine izin verdiğini hatırlatır konum verilerini sürekli olarak kullanmanızı sağlar. Şekil 8'de örnek bir bildirim gösterilmektedir.
Uygulamanızın SDK bağımlılıklarında konum gereksinimlerini kontrol edin
Uygulamanızda konum izinlerine bağlı SDK'lar kullanılıp kullanılmadığını,
özellikle de ACCESS_FINE_LOCATION
izni. Medium hakkındaki bu makaleye göz atın
SDK'nızın davranışlarını öğrenme hakkında
bağımlılıklarını görebilirsiniz.
Ek kaynaklar
Android'de konum izinleri hakkında daha fazla bilgi için aşağıdakileri görüntüleyin materyaller:
Codelab'ler
Videolar
Örnekler
- Konum izinlerinin kullanımını gösteren örnek uygulama.