Bilinen son konumu alma

Uygulamanız, Google Play Hizmetleri konum API'lerini kullanarak kullanıcının cihazının bilinen son konumunu isteyebilir. Çoğu durumda, kullanıcının mevcut konumuyla ilgilenirsiniz. Bu konum genellikle cihazın bilinen son konumuna eşdeğerdir.

Özellikle, cihazın bilinen son konumunu almak için birleştirilmiş konum sağlayıcıyı kullanın. Çok kaynaklı konum sağlayıcı, Google Play Hizmetleri'ndeki konum API'lerinden biridir. Temel konum teknolojisini yönetir ve yüksek doğruluk veya düşük güç gibi gereksinimleri üst düzeyde belirtebilmeniz için basit bir API sağlar. Ayrıca cihazın pil gücünü kullanma şeklini de optimize eder.

Not: Uygulamanız arka planda çalışırken konuma erişim, uygulamanın temel işlevi açısından kritik öneme sahip olmalı ve kullanıcılara uygun şekilde açıklanmalıdır.

Bu derste, çok kaynaklı konum sağlayıcıdaki getLastLocation() yöntemini kullanarak bir cihazın konumu için tek bir istekte bulunma işlemi gösterilmektedir.

Google Play Hizmetleri'ni kurma

Birleştirilmiş konum sağlayıcıya erişmek için uygulamanızın geliştirme projesinde Google Play Hizmetleri bulunmalıdır. Google Play Hizmetleri bileşenini SDK Yöneticisi aracılığıyla indirip yükleyin ve kitaplığı projenize ekleyin. Ayrıntılar için Google Play Hizmetlerini Ayarlama rehberine bakın.

Uygulama izinlerini belirtme

Özellikleri konum hizmetlerini kullanan uygulamalar, bu özelliklerin kullanım alanlarına bağlı olarak konum izni istemelidir.

Konum hizmetleri istemcisi oluşturma

Etkinliğinizin onCreate() yönteminde, aşağıdaki kod snippet'inde gösterildiği gibi Fused Location Provider Client'ın bir örneğini oluşturun.

Kotlin

private lateinit var fusedLocationClient: FusedLocationProviderClient

override fun onCreate(savedInstanceState: Bundle?) {
    // ...

    fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
}

Java

private FusedLocationProviderClient fusedLocationClient;

// ..

@Override
protected void onCreate(Bundle savedInstanceState) {
    // ...

    fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
}

Bilinen son konumu alma

Konum Hizmetleri istemcisini oluşturduktan sonra kullanıcının cihazının bilinen son konumunu alabilirsiniz. Uygulamanız bunlara bağlandığında cihaz konumunu almak için birleştirilmiş konum sağlayıcının getLastLocation() yöntemini kullanabilirsiniz. Bu çağrı tarafından döndürülen konumun hassasiyeti, konum izinleri isteme ile ilgili kılavuzda açıklandığı gibi, uygulama manifestinize yerleştirdiğiniz izin ayarı tarafından belirlenir.

Bilinen son konumu istemek için getLastLocation() yöntemini çağırın. Aşağıdaki kod snippet'inde istek ve yanıtın basit bir şekilde işlenmesi gösterilmektedir:

Kotlin

fusedLocationClient.lastLocation
        .addOnSuccessListener { location : Location? ->
            // Got last known location. In some rare situations this can be null.
        }

Java

fusedLocationClient.getLastLocation()
        .addOnSuccessListener(this, new OnSuccessListener<Location>() {
            @Override
            public void onSuccess(Location location) {
                // Got last known location. In some rare situations this can be null.
                if (location != null) {
                    // Logic to handle location object
                }
            }
        });

getLastLocation() yöntemi, coğrafi konumun enlem ve boylam koordinatlarını içeren bir Location nesnesi almak için kullanabileceğiniz bir Task döndürür. Konum nesnesi aşağıdaki durumlarda null olabilir:

  • Konum, cihaz ayarlarında kapatılmıştır. Konum devre dışı bırakıldığında önbellek de temizlendiğinden, son konum daha önce alınmış olsa bile sonuç null olabilir.
  • Cihazın konumu hiç kaydedilmemiş olabilir. Bu durum, yeni bir cihazda veya fabrika ayarlarına geri yüklenmiş bir cihazda görülebilir.
  • Cihazdaki Google Play Hizmetleri yeniden başlatıldı ve hizmetler yeniden başlatıldıktan sonra konum isteyen etkin bir Fused Location Provider istemcisi yok. Bu durumu önlemek için yeni bir istemci oluşturabilir ve konum güncellemelerini kendiniz isteyebilirsiniz. Daha fazla bilgi için Konum güncellemeleri isteğinde bulunma başlıklı makaleyi inceleyin.

En iyi konum tahminini seçme

FusedLocationProviderClient, cihaz konum bilgilerini almak için çeşitli yöntemler sunar. Uygulamanızın kullanım alanına bağlı olarak aşağıdakilerden birini seçin:

  • getLastLocation() daha hızlı konum tahmini alır ve uygulamanızla ilişkilendirilebilecek pil kullanımını en aza indirir. Ancak başka istemciler konumu yakın zamanda etkin olarak kullanmadıysa konum bilgileri güncel olmayabilir.
  • getCurrentLocation() daha yeni ve daha doğru bir konumu daha tutarlı bir şekilde alır. Ancak bu yöntem, cihazda etkin konum hesaplaması yapılmasına neden olabilir.

    Bu, mümkün olduğunda yeni bir konum elde etmenin önerilen yoludur ve requestLocationUpdates() kullanarak konum güncellemelerini kendiniz başlatıp yönetmek gibi alternatiflerden daha güvenlidir. Uygulamanız requestLocationUpdates() işlevini çağırıyorsa konum kullanılamadığında veya yeni bir konum alındıktan sonra istek doğru şekilde durdurulmadığında uygulamanız bazen büyük miktarda güç tüketebilir.

Ek kaynaklar

Android'de mevcut konumun getirilmesi hakkında daha fazla bilgi için aşağıdaki materyallere göz atın:

Örnekler

  • Mevcut konum getirilirken en iyi uygulamaları göstermek için örnek uygulama.