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 ilgileniyorsunuz. Bu konum, genellikle cihazın bilinen son konumuyla eşdeğerdir.

Daha açık belirtmek gerekirse, 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 yüksek düzeyde gereksinimleri belirtebilmeniz için basit bir API sağlar. Ayrıca cihazın pil gücü kullanımını optimize eder.

Not: Uygulamanız arka planda çalışırken konum erişimi, uygulamanın temel işlevi için kritik öneme sahip olmalı ve kullanıcılara uygun bir açıklamayla sunulmalıdır.

Bu derste, çok kaynaklı konum sağlayıcıdaki getLastLocation() yöntemini kullanarak bir cihazın konumu için tek bir istek nasıl gönderileceği gösterilmektedir.

Google Play Hizmetleri'ni kurma

Çok kaynaklı konum sağlayıcısına erişmek için uygulamanızın geliştirme projesinin Google Play Hizmetleri'ni içermesi gerekir. SDK Yöneticisi üzerinden Google Play Hizmetleri bileşenini indirip yükleyin ve kitaplığı projenize ekleyin. Ayrıntılı bilgi için Google Play Hizmetleri'ni Ayarlama kılavuzunu inceleyin.

Uygulama izinlerini belirtme

Konum hizmetlerini kullanan uygulamalar, bu özelliklerin kullanım alanlarına bağlı olarak konum izinleri istemelidir.

Konum hizmetleri istemcisi oluşturma

Etkinliğinizin onCreate() yönteminde, aşağıdaki kod snippet'inde gösterildiği gibi Birleştirilmiş Konum Sağlayıcı İstemcisi örneği 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 Servisleri 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şik konum sağlayıcının getLastLocation() yöntemini kullanabilirsiniz. Bu çağrının döndürdüğü konumun doğruluğu, konum izinlerini isteme ile ilgili kılavuzda açıklandığı gibi, uygulama manifest dosyanıza eklediğiniz izin ayarına göre belirlenir.

Bilinen son konumu istemek için getLastLocation() yöntemini çağırın. Aşağıdaki kod snippet'inde isteği ve yanıtın basit bir şekilde nasıl işlendiği 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 bir konumun enlem ve boylam koordinatlarını içeren bir Location nesnesi almak için kullanabileceğiniz bir Task döndürür. Yer nesnesi aşağıdaki durumlarda null olabilir:

  • Konum, cihaz ayarlarında kapatılmış olabilir. Konum devre dışı bırakıldığında önbelleğe de temizlendiği için son konum daha önce alınmış olsa bile sonuç null olabilir.
  • Cihazın konumu hiç kaydedilmediyse bu durum yeni bir cihaz veya fabrika ayarlarına geri yüklenen bir cihazla ilgili olabilir.
  • Cihazdaki Google Play Hizmetleri yeniden başlatıldı ve hizmetler yeniden başlatıldıktan sonra konum isteğinde bulunan etkin bir Birleştirilmiş Konum Sağlayıcı 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 Alma başlıklı makaleyi inceleyin.

En iyi konum tahminini seçin

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

    Bu yöntem, mümkün olduğunda yeni bir konum elde etmek için önerilen yoldur ve requestLocationUpdates() kullanarak konum güncellemelerini kendiniz başlatmak ve yönetmek gibi alternatiflerden daha güvenlidir. Uygulamanız requestLocationUpdates() çağrısı yapıyorsa konum kullanılamıyorsa veya yeni bir konum elde edildikten sonra istek doğru şekilde durdurulmazsa uygulamanız bazen çok fazla güç tüketebilir.

Ek kaynaklar

Android'de mevcut konumu getirme hakkında daha fazla bilgi için aşağıdaki materyalleri inceleyebilirsiniz:

Örnekler

  • Mevcut konumu getirirken en iyi uygulamaları göstermek için örnek uygulama.