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 konumuna eşdeğerdir.

Cihazın bilinen son konumunu almak için özellikle çok kaynaklı 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 yüksek düzeyde belirleyebilmeniz 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 konuma erişim, uygulamanın temel işlevi açısından kritik öneme sahip olmalıdır ve kullanıcılara uygun şekilde açıklama yapılmalıdır.

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

Google Play Hizmetleri'ni kurun

Ç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. 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 Hizmetleri'ni Kurma kılavuzuna bakın.

Uygulama izinlerini belirleme

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

Konum hizmetleri istemcisi oluştur

Etkinliğinizin onCreate() yönteminde, aşağıdaki kod snippet'i 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, bir kullanıcının cihazının bilinen son konumunu alabilirsiniz. Uygulamanız bunlara bağlandığında cihaz konumunu almak için çok kaynaklı konum sağlayıcısının getLastLocation() yöntemini kullanabilirsiniz. Bu çağrının döndürdüğü konumun kesinliği, konum izni isteme kılavuzunda açıklandığı üzere uygulama manifest dosyanıza yerleştirdiğ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, bir coğrafi konumun enlem ve boylam koordinatlarına sahip bir Location nesnesi almak için kullanabileceğiniz bir Task değeri döndürür. Konum nesnesi aşağıdaki durumlarda null olabilir:

  • Konum, cihaz ayarlarında kapalı. Konumun devre dışı bırakılması önbelleği de temizlediği için son konum daha önce alınmış olsa bile sonuç null olabilir.
  • Cihaz, konumunu hiçbir zaman kaydetmemiştir (yeni bir cihaz veya fabrika ayarlarına geri yüklenmiş bir cihaz olabilir).
  • Cihazdaki Google Play Hizmetleri yeniden başlatıldı. Ayrıca, hizmetler yeniden başlatıldıktan sonra konum isteğinde bulunan etkin bir Kaynaşmış Konum Sağlayıcı istemcisi yok. Bu durumu önlemek için yeni bir istemci oluşturup konum güncellemesi isteğinde bulunabilirsiniz. Daha fazla bilgi için Konum Güncellemelerini Alma konusuna bakın.

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(), daha hızlı bir şekilde konum tahmini alır ve uygulamanızla ilişkilendirilebilecek pil kullanımını en aza indirir. Ancak, yakın zamanda başka bir müşteri konumu etkin olarak kullanmadıysa konum bilgileri güncel olmayabilir.
  • getCurrentLocation() daha tutarlı şekilde daha güncel ve doğru bir konum elde eder. Ancak bu yöntem, cihazda etkin konum hesaplaması olması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ıyorsa konum yoksa veya yeni bir konum aldıktan sonra istek doğru şekilde durdurulmazsa uygulamanız bazen yüksek miktarda güç tüketebilir.

Ek kaynaklar

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

Numuneler

  • Geçerli konumu getirirken en iyi uygulamaları gösteren örnek uygulama.