Wear OS'te konumu algılama

Saatin bir bakışta görülebilen küçük form faktörü, Wear OS'i kullanıcının konumunu kaydeden, raporlayan ve yanıt veren uygulamalar için ideal bir platform haline getirir. Örneğin, kullanıcılara mesafe, hız ve yön hakkında gerçek zamanlı güncellemeler sunan veya kullanıcıların çevresiyle ilgili bir bakışta ipuçları sağlayan uygulamalar oluşturabilirsiniz.

Daha fazla bilgi edinmek için Konumu algılayan uygulamalar oluşturma başlıklı makaleyi inceleyin.

Bazı saatlerde, konum verilerini bağlı bir telefon gerektirmeden alan yerleşik GPS sensörü bulunur. Bir saat uygulamasında konum verisi isteğinde bulunduğunuzda, sistem konumu gücü en verimli şekilde kullanarak telefondan veya saatten alır. Böylece, saatinizde GPS sensörü olmasa bile konum bilgilerini alabilirsiniz.

Konum verisi edinmenin pil ömrü üzerindeki etkisini azaltmak için PRIORITY_BALANCED_POWER_ACCURACY değeriyle setPriority() numarasını arayın. Farklı öncelik ayarları, çipleri farklı şekilde optimize edebilir.

Mümkün olduğunda setInterval() kullanarak konum bilgisini dakikada bir kereden fazla olmayacak şekilde isteyerek pilden tasarruf edin.

Aşağıdaki bölümlerde açıklandığı gibi, sensörü olmayan bir kol saatinin telefonla bağlantısı kesildiğinde uygulamanızın konum verisi kaybını işlemesi gerekir.

Yönteminizi seçin

Wear OS uygulamalarına konum verilerini sağlamanın birkaç yolu vardır. Çok Kaynaklı Konum Sağlayıcı'yı (FLP) veya Wear Sağlık Hizmetleri'ni (WHS) kullanabilirsiniz. FLP, bir Google Play Services API'dir.

FLP'yi aşağıdaki durumlarda kullanın:

  • Park edilmiş bir arabanın konumunu işaretleme gibi, anlık konum verilerini almak istiyorsanız ancak bunları sürekli olarak değil, sağlamak istersiniz.
  • Konumun sürekli olarak bulunmasını istiyorsunuz, ancak konum geçmişine ihtiyacınız yok.

WHS'yi aşağıdaki durumlarda kullanın:

  • Başka sensörlerden veri almak isterseniz veya gelecekte başka sensörlerden veri almak istemeniz olasıdır.
  • Uygulamanız, konum verilerini belirli bir zaman aralığı boyunca izlemesi gereken bir antrenman veya egzersiz uygulamasıdır.

iPhone'larla eşlenmiş saatler için iPhone'larla eşlenmiş saatler için konum verileri bölümüne göz atın.

Çok Kaynaklı Konum Sağlayıcı'yı kullanma

Saatte, FusedLocationProviderClient kullanarak konum verilerini alın. FLP, telefondaki konum verilerini kullanabilir. Daha fazla bilgi için Konum hizmetleri istemcisi oluşturma bölümüne bakın.

Konum güncellemeleri isteme ve bir kullanıcının konumunu sürekli izleme hakkında bilgi için Konum güncellemeleri isteme konusuna göz atın.

Araç içi GPS'i algıla

Bir kullanıcı, yerleşik GPS sensörü olmayan bir kol saatiyle koşuya çıkar ve eşlenen telefonu arkada bırakırsa saat uygulamanız bağlı cihaz üzerinden konum verilerini alamaz. Uygulamanızda bu durumu tespit edin ve kullanıcıyı konum özelliklerinin kullanılamadığı konusunda uyarın.

Saatte yerleşik GPS sensörü olup olmadığını öğrenmek için PackageManager.FEATURE_LOCATION_GPS ile hasSystemFeature() yöntemini çağırın. Aşağıdaki kod, bir aktivite başlattığınızda saatin yerleşik GPS sensörü olup olmadığını algılar:

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.main_activity)

    if (!hasGps()) {
        Log.d(TAG, "This hardware doesn't have GPS.")
        // Fall back to functionality that doesn't use location or
        // warn the user that location function isn't available.
    }
}

private fun hasGps(): Boolean =
        packageManager.hasSystemFeature(PackageManager.FEATURE_LOCATION_GPS)

Java

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);

    if (!hasGps()) {
        Log.d(TAG, "This hardware doesn't have GPS.");
        // Fall back to functionality that doesn't use location or
        // warn the user that location function isn't available.
    }
    ...
}

private boolean hasGps() {
    return getPackageManager().hasSystemFeature(PackageManager.FEATURE_LOCATION_GPS);
}

Bağlantıyı kesme etkinliklerini işleme

Yerleşik GPS sensörü olmayan bir saatte telefon bağlantısı kesilirse saatin konum veri akışı kesilir. Uygulamanız sürekli bir veri akışı bekliyorsa bağlantı koptuğunu algılamalı, kullanıcıyı uyarmalı ve işlevselliğini sorunsuzca düşürmelidir.

Mobil cihazda olduğu gibi, FusedLocationProviderClient.requestLocationUpdates() kullanarak konum güncellemesi isteğinde bulunduğunuzda LocationCallback veya PendingIntent iletirsiniz. Bunların her ikisi de konum bilgilerini ve LocationAvailability durumunu içerir.

LocationCallback seçeneğini kullanırken konum müsaitlik durumu ile ilgili güncellemeleri almak için onLocationAvailability() değerini geçersiz kılın.

PendingIntent seçeneğini kullanırken Intent döndürülürse LocationAvailability.extractLocationAvailability(Intent) yöntemini kullanarak Intent öğesinden konum kullanılabilirliği durumunu çıkarın.

Herkese açık kullanıcı adı konumu bulunamadı

GPS sinyali kaybolduğunda kullanıcı kol saatinin bilinen son konumunu alabilirsiniz. Bilinen son konumun alınması, GPS sabitlemesi alamadığınızda ve saatte yerleşik GPS olmadığı ve telefonla bağlantısı kesildiğinde faydalı olur. Daha fazla bilgi için Bilinen son konumu alma bölümüne bakın.

Toplu çağrılarla konumu boşaltma

Toplu çağrıları kullanıyorsanız ekran tekrar açıldığında veya ambiyans modundan döndüğünde flushLocations() çağrısı yaparak toplu konumları hemen kayıtlı tüm LocationListeners, LocationCallbacks ve Pending Intents öğelerine döndürün.