Android'de Kotlin ile konum güncellemelerini alma

Android 10 ve 11, kullanıcıların uygulamaları için cihaz üzerinde daha fazla kontrole sahip olmalarını sağlar.

Android 11'de çalışan bir uygulama konum erişimi istediğinde, kullanıcıların dört seçeneği vardır:

  • Her zaman izin ver
  • Yalnızca uygulama kullanılırken izin ver (Android 10'da)
  • Yalnızca bir kez (Android 11'de)
  • Reddet

Android 10

Android 11

Bu codelab'de, konum güncellemeleri almayı nasıl yapacağınızı ve Android'in özellikle Android 10 ve 11 sürümlerinden herhangi birinde nasıl konum destekleyeceğinizi öğreneceksiniz. Codelab'in sonunda, konum güncellemeleri almak için mevcut en iyi uygulamaları takip eden bir uygulamanız olabilir.

Ön koşullar

Ne yaparsınız?

  • Android'de konumla ilgili en iyi uygulamaları takip edin.
  • Ön planda konum izinlerini kullanın (kullanıcı, uygulamanız kullanılırken cihazınızın konumuna erişmesini istediğinde).
  • Abone olmak ve konuma aboneliği iptal etmek için kod ekleyerek mevcut bir uygulamayı değiştirerek konum erişimi isteme desteği ekleyin.
  • Android 10 ve 11 için uygulamaya destek ekleyerek ön planda konumdayken veya kullanımdayken konuma erişim mantığı ekleyin.

Gerekenler

  • Kodu çalıştırmak için Android Studio 3.4 veya sonraki sürümler
  • Android 10 ve 11'in geliştirici önizlemesini çalıştıran bir cihaz/emülatör

Starter projesi deposunu klonlama

Mümkün olduğunca hızlı bir şekilde başlamanız için bu başlangıç projesinden yararlanabilirsiniz. Git'i yüklediyseniz aşağıdaki komutu çalıştırabilirsiniz:

 git clone https://github.com/googlecodelabs/while-in-use-location

Doğrudan GitHub sayfasını ziyaret edebilirsiniz.

Git'iniz yoksa projeyi zip dosyası olarak alabilirsiniz:

Zip dosyasını indirin

Projeyi içe aktar

Android Studio'yu açın, "Karşılama ekranından mevcut bir Android Studio projesini açın" ve proje dizinini açın.

Proje yüklendikten sonra Git'in yerel değişikliklerinizin tümünü izlemediğini belirten bir uyarı da görebilirsiniz. Yoksay'ı tıklayabilirsiniz. (Değişiklikleri Git deposuna geri aktaramazsınız.)

Android görünümündeyseniz proje penceresinin sol üst köşesinde aşağıdaki gibi bir resim görürsünüz. (Proje görünümündeyseniz aynı şeyi görmek için projeyi genişletmeniz gerekir.)

İki klasör vardır (base ve complete). Bunların her biri "Modül" olarak bilinir.

Android Studio'nun projeyi arka planda ilk kez derlemesinin birkaç saniye sürebileceğini lütfen unutmayın. Bu süre zarfında, Android Studio'nun alt kısmındaki durum çubuğunda şu mesajı görürsünüz:

Kod değişiklikleri yapmadan önce Android Studio'nun dizine eklemeyi ve proje oluşturmayı bitirene kadar bekleyin. Bu, Android Studio'nun gerekli tüm bileşenleri almasını sağlar.

Dildeki değişikliklerin geçerli olması için yeniden yüklensin mi? gibi bir istem alırsanız Evet'i seçin.

Başlangıç projesini anlama

Uygulamada kurulum yaptınız ve konum isteğinde bulunmaya hazırsınız. Başlangıç noktası olarak base modülünü kullanın. Her adımda base modülüne kod ekleyin. Bu codelab'i tamamladığınızda base modülündeki kod complete modülünün içeriğiyle eşleşmelidir. complete modülü, çalışmalarınızı kontrol etmek veya herhangi bir sorunla karşılaşırsanız referansta bulunmak için kullanılabilir.

Temel bileşenler aşağıdakileri içerir:

  • MainActivity: Kullanıcının, uygulamanın cihaz konumuna erişmesine izin veren kullanıcı arayüzü
  • LocationService: Konum değişikliklerine abone olan ve abonelikten çıkan bir kullanıcı, uygulama etkinliğinden ayrılırsa kendisini bir ön plan hizmetine tanıtan (bildirimle) bir hizmettir. Konum kodunu buraya eklersiniz.
  • Util - Location sınıfı için uzantı işlevleri ekler ve SharedPreferences konumuna (basitleştirilmiş veri katmanı) konum kaydeder.

Emülatör kurulumu

Android emülatörü ayarlama hakkında bilgi edinmek için Emülatörde çalıştırma başlıklı makaleyi inceleyin.

Başlangıç projesini çalıştırma

Uygulamanızı çalıştırın.

  1. Android cihazınızı bilgisayarınıza bağlayın veya bir emülatör başlatın. (Cihazda Android 10 veya sonraki bir sürümün yüklü olduğundan emin olun.)
  2. Araç çubuğunda, açılır seçiciden base yapılandırmasını seçin ve Çalıştır'ı tıklayın:


  1. Cihazınızda aşağıdaki uygulamanın göründüğüne dikkat edin:


Çıkış ekranında konum bilgisinin görünmediğini fark edebilirsiniz. Bunun nedeni, konum kodunu henüz eklememiş olmanızdır.

Kavramlar

Bu codelab'in amacı, konum güncellemelerini nasıl alacağınızı göstermek ve bunun sonucunda Android 10 ve Android 11'i desteklemektir.

Ancak kodlamaya başlamadan önce temel bilgileri incelemeniz önerilir.

Konum erişimi türleri

Codelab'in başından beri dört farklı konum erişimi seçeneği görebilirsiniz. Bunların ne anlama geldiğine göz atın:

  • Yalnızca uygulamayı kullanırken izin ver
  • Bu seçenek, çoğu uygulama için önerilen seçenektir. "Kullanımda" veya "yalnızca ön planda" erişim olarak da bilinen bu seçenek, Android 10'da eklenmiş olup geliştiricilerin yalnızca uygulama aktif olarak kullanılırken konum almasına olanak tanır. Aşağıdaki durumlardan biri geçerli olan uygulamalar etkin olarak değerlendirilir:
  • Bir etkinlik görünüyor.
  • Devam eden bir bildirimle ön plan hizmeti çalışıyor.
  • Yalnızca bir defa
  • Bu ayar, Android 11'de eklenen Yalnızca uygulamayı kullanırken izin ver ayarıyla aynıdır, ancak sınırlı bir süre boyunca geçerlidir. Daha fazla bilgi için Tek seferlik izinler bölümüne bakın.
  • Reddet
  • Bu seçenek, konum bilgilerine erişimi engeller.
  • Her zaman izin ver
  • Bu seçenek konum erişimine her zaman izin verir ancak Android 10 ve sonraki sürümler için ek izin gerektirir. Ayrıca, geçerli bir kullanım alanına sahip olduğunuzdan ve konum politikalarına uyduğunuzdan emin olmanız gerekir. Nadiren kullanıldığı için bu codelab'de bu seçeneği kullanmayacaksınız. Ancak, geçerli bir kullanım alanınız varsa ve arka planda konuma erişim de dahil olmak üzere tüm zaman konumlarının nasıl doğru şekilde ele alınacağını öğrenmek istiyorsanız LocationUpdatesArkaKotlin örneğini inceleyin.

Hizmetler, ön plan hizmetleri ve bağlama

Yalnızca uygulamayı kullanırken izin ver konum güncellemelerini tam olarak desteklemek için, kullanıcının uygulamanızdan ayrıldığı zamanı dikkate almanız gerekir. Bu durumda güncelleme almaya devam etmek isterseniz bir ön plan Service oluşturmanız ve bunu bir Notification ile ilişkilendirmeniz gerekir.

Ayrıca, uygulamanız görünür olduğunda ve kullanıcı uygulamanızdan ayrıldığında konum güncellemeleri istemek için aynı Service'yi kullanmak istiyorsanız bu Service öğesini kullanıcı arayüzü öğesine bağlamanız/bağlantısını kaldırmanız gerekir.

Bu codelab yalnızca konum güncellemeleri almaya odaklandığından ihtiyaç duyduğunuz tüm kodu ForegroundOnlyLocationService.kt sınıfında bulabilirsiniz. Sınıfa ve MainActivity.kt özelliğine göz atarak birlikte nasıl çalıştıklarını görebilirsiniz.

Daha fazla bilgi için Hizmetlere genel bakış ve Sınırlı hizmetlere genel bakış başlıklı makaleleri inceleyin.

İzinler

NETWORK_PROVIDER veya GPS_PROVIDER üzerinden konum güncellemeleri almak için Android manifest dosyanızda sırasıyla ACCESS_COARSE_LOCATION veya ACCESS_FINE_LOCATION iznini beyan ederek kullanıcının iznini istemeniz gerekir. Bu izinler olmadan uygulamanız çalışma zamanında konuma erişim isteğinde bulunamaz.

Bu izinler, uygulamanız Android 10 veya sonraki bir sürümü çalıştıran cihazlarda kullanıldığında Yalnızca bir kez ve Yalnızca uygulamayı kullanırken izin ver durumlarını kapsar.

Location

Uygulamanız, com.google.android.gms.location paketindeki sınıflar üzerinden, desteklenen konum hizmetleri grubuna erişebilir.

Ana sınıflara bakın:

  • FusedLocationProviderClient
  • Bu, konum çerçevesinin merkezi bileşenidir. Oluşturulduktan sonra, konum güncellemeleri istemek ve bilinen son konumu almak için bu adresi kullanırsınız.
  • LocationRequest
  • Bu, istekler için hizmet kalitesi parametrelerini (güncellemeler, öncelikler ve doğruluk için aralıklar) içeren bir veri nesnesidir. Bu, konum güncellemeleri istediğinizde FusedLocationProviderClient adresine iletilir.
  • LocationCallback
  • Bu parametre, cihaz konumu değiştiğinde veya artık belirlenemediğinde bildirim almak için kullanılır. Bu işlem, veritabanınıza kaydetmek üzere Location alabileceğiniz bir LocationResult iletir.

Artık neler yaptığınıza dair temel bir fikriniz olduğuna göre kodu kullanmaya başlayabilirsiniz.

Bu codelab'de en yaygın konum seçeneği üzerinde durulur: Yalnızca uygulamayı kullanırken izin ver.

Konum güncellemelerini almak için uygulamanızda görünür bir etkinlik veya ön planda çalışan bir hizmet (bildirimle) olmalıdır.

İzinler

Bu codelab'in amacı, konum izinlerini nasıl isteyeceğinizi değil, konum güncellemelerini nasıl alacağınızı göstermektir. Bu nedenle izin temelli kod sizin için önceden yazılmıştır. Konuyu anladıysanız atlayabilirsiniz.

İzinlerle ilgili öne çıkan noktalar şunlardır (bu kısım için herhangi bir işlem yapmanız gerekmez):

  1. AndroidManifest.xml içerisinde hangi izni kullandığınızı bildirin.
  2. Konum bilgilerine erişmeyi denemeden önce, kullanıcının uygulamanıza izin verip vermediğini kontrol edin. Uygulamanız henüz izin almadıysa erişim isteğinde bulunun.
  3. Kullanıcının izin seçimini yönetin. (Bu kodu MainActivity.kt adresinde görebilirsiniz.)

AndroidManifest.xml içinde veya MainActivity.kt içinde TODO: Step 1.0, Review Permissions araması yaparsanız izinler için yazılmış tüm kodu görürsünüz.

Daha fazla bilgi edinmek için İzinlere genel bakış başlıklı makaleyi inceleyin.

Şimdi, konum kodu yazmaya başlayın.

Konum güncellemeleri için gereken temel değişkenleri inceleyin

base modülünde TODO: Step 1.1, Review variables şunu arayın:

ForegroundOnlyLocationService.kt dosya.

Bu adımda herhangi bir işlem yapmanız gerekmez. Konum güncellemelerini almak için kullandığınız önemli sınıfları ve değişkenleri anlamak için yorumlarla birlikte aşağıdaki kod bloğunu incelemeniz yeterlidir.

// TODO: Step 1.1, Review variables (no changes).
// FusedLocationProviderClient - Main class for receiving location updates.
private lateinit var fusedLocationProviderClient: FusedLocationProviderClient

// LocationRequest - Requirements for the location updates, i.e., how often you
// should receive updates, the priority, etc.
private lateinit var locationRequest: LocationRequest

// LocationCallback - Called when FusedLocationProviderClient has a new Location.
private lateinit var locationCallback: LocationCallback

// Used only for local storage of the last known location. Usually, this would be saved to your
// database, but because this is a simplified sample without a full database, we only need the
// last location to create a Notification if the user navigates away from the app.
private var currentLocation: Location? = null

FusedLocationProviderClient ilk kullanıma hazırlama sürecini inceleyin

base modülündeki ForegroundOnlyLocationService.kt dosyasında TODO: Step 1.2, Review the FusedLocationProviderClient araması yapın. Kodunuz şu şekilde görünmelidir:

// TODO: Step 1.2, Review the FusedLocationProviderClient.
fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this)

Önceki yorumlarda belirtildiği gibi bu konu, konum güncellemelerini almanın ana sınıfıdır. Değişken sizin için zaten başlatıldı, ancak nasıl başlatıldığını anlamak için kodu incelemek önemlidir. Daha sonra konum güncellemeleri istemek için bazı kodları buraya eklersiniz.

LocationRequest'i başlatma

  1. base modülündeki ForegroundOnlyLocationService.kt dosyasında TODO: Step 1.3, Create a LocationRequest araması yapın.
  2. Yorumdan sonra aşağıdaki kodu ekleyin.

LocationRequest başlatma kodu, isteğiniz için ihtiyacınız olan ekstra hizmet parametrelerinin kalitesini (aralıklar, maksimum bekleme süresi ve öncelik) ekler.

// TODO: Step 1.3, Create a LocationRequest.
locationRequest = LocationRequest().apply {
   // Sets the desired interval for active location updates. This interval is inexact. You
   // may not receive updates at all if no location sources are available, or you may
   // receive them less frequently than requested. You may also receive updates more
   // frequently than requested if other applications are requesting location at a more
   // frequent interval.
   //
   // IMPORTANT NOTE: Apps running on Android 8.0 and higher devices (regardless of
   // targetSdkVersion) may receive updates less frequently than this interval when the app
   // is no longer in the foreground.
   interval = TimeUnit.SECONDS.toMillis(60)

   // Sets the fastest rate for active location updates. This interval is exact, and your
   // application will never receive updates more frequently than this value.
   fastestInterval = TimeUnit.SECONDS.toMillis(30)

   // Sets the maximum time when batched location updates are delivered. Updates may be
   // delivered sooner than this interval.
   maxWaitTime = TimeUnit.MINUTES.toMillis(2)

   priority = LocationRequest.PRIORITY_HIGH_ACCURACY
}
  1. Her birinin nasıl çalıştığını anlamak için yorumları okuyun.

LocationCallback'i başlatma

  1. base modülündeki ForegroundOnlyLocationService.kt dosyasında TODO: Step 1.4, Initialize the LocationCallback araması yapın.
  2. Yorumdan sonra aşağıdaki kodu ekleyin.
// TODO: Step 1.4, Initialize the LocationCallback.
locationCallback = object : LocationCallback() {
   override fun onLocationResult(locationResult: LocationResult?) {
       super.onLocationResult(locationResult)

       if (locationResult?.lastLocation != null) {

           // Normally, you want to save a new location to a database. We are simplifying
           // things a bit and just saving it as a local variable, as we only need it again
           // if a Notification is created (when user navigates away from app).
           currentLocation = locationResult.lastLocation

           // Notify our Activity that a new location was added. Again, if this was a
           // production app, the Activity would be listening for changes to a database
           // with new locations, but we are simplifying things a bit to focus on just
           // learning the location side of things.
           val intent = Intent(ACTION_FOREGROUND_ONLY_LOCATION_BROADCAST)
           intent.putExtra(EXTRA_LOCATION, currentLocation)
           LocalBroadcastManager.getInstance(applicationContext).sendBroadcast(intent)

           // Updates notification content if this service is running as a foreground
           // service.
           if (serviceRunningInForeground) {
               notificationManager.notify(
                   NOTIFICATION_ID,
                   generateNotification(currentLocation))
           }
       } else {
           Log.d(TAG, "Location information isn't available.")
       }
   }
}

Burada oluşturduğunuz LocationCallback, yeni bir konum güncellemesi olduğunda FusedLocationProviderClient uygulamasının çağıracağı geri çağırmadır.

Geri çağırmanızda önce bir LocationResult nesnesi kullanarak en son konumu alırsınız. Bunun ardından, bir yerel yayın (etkinse) kullanarak yeni konumunuzu Activity olarak bildirir veya bu hizmet bir ön plan Service olarak çalışıyorsa Notification uygulamasını güncellersiniz.

  1. Her bölümün ne işe yaradığını anlamak için yorumları okuyun.

Konum değişikliklerine abone olma

Her şeyi başlattığınıza göre güncellemeleri almak istediğinizi FusedLocationProviderClient adlı kullanıcıya bildirmeniz gerekir.

  1. base modülündeki ForegroundOnlyLocationService.kt dosyasında Step 1.5, Subscribe to location changes araması yapın.
  2. Yorumdan sonra aşağıdaki kodu ekleyin.
// TODO: Step 1.5, Subscribe to location changes.
fusedLocationProviderClient.requestLocationUpdates(locationRequest, locationCallback, Looper.myLooper())

requestLocationUpdates() araması, FusedLocationProviderClient kullanıcıya konum güncellemelerini almak istediğinizi bildirir.

Daha önce tanımladığınız LocationRequest ve LocationCallback öğelerini muhtemelen biliyorsunuz. Bunlar, FusedLocationProviderClient için isteğinizle ilgili hizmet kalitesi parametrelerini ve bir güncelleme olduğunda çağrılması gereken yöntemi belirtir. Son olarak Looper nesnesi, geri çağırmanın ileti dizisini belirtir.

Bu kodun bir try/catch ifadesi içinde olduğunu da fark edebilirsiniz. Uygulamanız konum bilgilerine erişim iznine sahip olmadığında SecurityException kurulduğundan bu yöntem için bu tür bir engelleme gerekir.

Konum değişikliklerini iptal etme

Uygulamanın artık konum bilgilerine erişmesi gerekmiyorsa konum güncellemeleri aboneliğinden çıkmak önemlidir.

  1. base modülündeki ForegroundOnlyLocationService.kt dosyasında TODO: Step 1.6, Unsubscribe to location changes araması yapın.
  2. Yorumdan sonra aşağıdaki kodu ekleyin.
// TODO: Step 1.6, Unsubscribe to location changes.
val removeTask = fusedLocationProviderClient.removeLocationUpdates(locationCallback)
removeTask.addOnCompleteListener { task ->
   if (task.isSuccessful) {
       Log.d(TAG, "Location Callback removed.")
       stopSelf()
   } else {
       Log.d(TAG, "Failed to remove Location Callback.")
   }
}

removeLocationUpdates() yöntemi, FusedLocationProviderClient cihazınıza artık LocationCallback cihazınızla ilgili konum güncellemeleri almak istemediğinizi bildiren bir görev oluşturur. addOnCompleteListener(), tamamlanması için geri çağırmayı sağlar ve Task işlemini yürütür.

Önceki adımda olduğu gibi, bu kodun bir try/catch ifadesi içinde olduğunu fark etmiş olabilirsiniz. Uygulamanız, konum bilgilerine erişme izni olmadığında SecurityException gerçekleştiği için bu yöntem için bu tür bir engelleme gerekir

Abone olma/abonelikten çıkma kodunu içeren yöntemlerin ne zaman çağrıldığını merak edebilirsiniz. Kullanıcı düğmeye dokunduğunda ana sınıfta tetiklenir. Bu yayını görmek istiyorsanız MainActivity.kt sınıfına göz atın.

Uygulamayı çalıştır

Uygulamanızı Android Studio'dan çalıştırıp konum düğmesini deneyin.

Çıkış ekranında konum bilgilerini görmeniz gerekir. Bu, Android 9 için tamamen işlevsel bir uygulamadır.

Bu bölümde Android 10 desteği ekleyebilirsiniz.

Uygulamanız konum değişikliklerine zaten abone olduğundan yapılacak çok fazla iş var.

Hatta, tek yapmanız gereken ön plan hizmetinizin konum amaçlı olarak kullanıldığını belirtmektir.

Hedef SDK 29

  1. base modülündeki build.gradle dosyasında TODO: Step 2.1, Target SDK 10 araması yapın.
  2. Şu değişiklikleri yapın:
  1. compileSdkVersion değerini 29 olarak ayarlayın.
  2. buildToolsVersion değerini "29.0.3" olarak ayarlayın.
  3. targetSdkVersion değerini 29 olarak ayarlayın.

Kodunuz şu şekilde görünmelidir:

android {
   // TODO: Step 2.1, Target Android 10.
   compileSdkVersion 29
   buildToolsVersion "29.0.3"
   defaultConfig {
       applicationId "com.example.android.whileinuselocation"
       minSdkVersion 26
       targetSdkVersion 29
       versionCode 1
       versionName "1.0"
   }
...
}

Bunu yaptıktan sonra, projenizi senkronize etmeniz istenir. Sync Now'ı (Şimdi Senkronize Et) tıklayın.

Sonrasında uygulamanız Android 10 için neredeyse hazır olur.

Ön Plan Hizmet Türü Ekleme

Android 10'da, kullanım sırasında konum erişimine ihtiyacınız varsa ön plan hizmetinizin türünü eklemeniz gerekir. Bu durumda, konum bilgilerini almak için kullanılır.

base modülünde, AndroidManifest.xml içinde TODO: 2.2, Add foreground service type öğesini arayın ve <service> öğesine aşağıdaki kodu ekleyin:

android:foregroundServiceType="location"

Kodunuz şu şekilde görünmelidir:

<application>
   ...

   <!-- Foreground services in Android 10+ require type. -->
   <!-- TODO: 2.2, Add foreground service type. -->
   <service
       android:name="com.example.android.whileinuselocation.ForegroundOnlyLocationService"
       android:enabled="true"
       android:exported="false"
       android:foregroundServiceType="location" />
</application>

İşte oldu. Uygulamanız, Android'de konumla ilgili en iyi uygulamaları izleyerek "kullanım sırasında" Android 10 konumunu destekler.

Uygulamayı çalıştır

Uygulamanızı Android Studio'dan çalıştırıp konum düğmesini deneyin.

Her şey eskisi gibi çalışır ancak artık Android 10'da çalışıyor. Daha önce konumların izinlerini kabul etmediyseniz artık izin ekranını göreceksiniz.

Bu bölümde Android 11'i hedefliyorsunuz.

Müjde! build.gradle dosyası dışında herhangi bir dosyada değişiklik yapmanız gerekmez.

Hedef SDK R

  1. base modülündeki build.gradle dosyasında TODO: Step 2.1, Target SDK kodunu arayın.
  2. Şu değişiklikleri yapın:
  1. compileSdkVersion ile "android-R" arasında
  2. targetSdkVersion ile "R" arasında

Kodunuz şu şekilde görünmelidir:

android {
   // TODO: Step 2.1, Target Android 10.
   compileSdkVersion "android-R"
   buildToolsVersion "29.0.2"
   defaultConfig {
       applicationId "com.example.android.whileinuselocation"
       minSdkVersion 26
       targetSdkVersion "R"
       versionCode 1
       versionName "1.0"
   }
...
}

Bunu yaptıktan sonra, projenizi senkronize etmeniz istenir. Sync Now'ı (Şimdi Senkronize Et) tıklayın.

Sonrasında uygulamanız Android 11 için hazır olur.

Uygulamayı çalıştır

Uygulamanızı Android Studio'dan çalıştırın ve düğmeyi tıklamayı deneyin.

Her şey eskisi gibi çalışır ancak artık Android 11'de çalışıyor. Daha önce konumların izinlerini kabul etmediyseniz artık izin ekranını göreceksiniz.

Bu codelab'de gösterildiği şekilde konum izinlerini kontrol ederek ve isteyerek, uygulamanızın cihaz konumu hakkındaki erişim düzeyini başarıyla takip edebilir.

Bu sayfada konum izinleriyle ilgili birkaç en iyi uygulama listelenmektedir. Kullanıcılarınızın güvenliğini sağlama hakkında daha fazla bilgi için Uygulama izinleri en iyi uygulamaları başlıklı makaleye bakın.

Yalnızca ihtiyacınız olan izinleri isteyin

Yalnızca gerektiğinde izin isteyin. Örneğin:

  • Kesinlikle gerekli olmadıkça uygulama başlatılırken konum izni istemeyin.
  • Uygulamanız Android 10 veya sonraki bir sürümü hedefliyorsa ve ön plan hizmetiniz varsa manifest dosyasında foregroundServiceType "location" belirtin.
  • Kullanıcı Konumuna Daha Güvenli ve Daha Şeffaf Erişim bölümünde açıklandığı gibi geçerli bir kullanım alanınız olmadığı sürece arka planda konum izni istemeyin.

İzin verilmemesi durumunda kontrollü azalmayı destekleme

İyi bir kullanıcı deneyimi sağlamak için uygulamanızı aşağıdaki durumları sorunsuzca işleyebilecek şekilde tasarlayın:

  • Uygulamanızın konum bilgilerine erişimi yok.
  • Uygulamanız arka planda çalışırken konum bilgilerine erişemiyor.

Android'de konum güncellemelerini nasıl alacağınızı öğrenerek, en iyi uygulamaları göz önünde bulundurun.

Daha fazla bilgi