Wear OS'te konumu algılama

Saatin küçük, bir bakışta göz atılabilen form faktörü, Wear OS'i kullanıcının konumunu kaydeden, bildiren 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 anlık güncellemeler sunan veya kullanıcıların çevresine dair bir bakışta bilgi veren uygulamalar oluşturabilirsiniz.

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

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

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

Mümkün olduğunda setInterval() kullanarak konumu dakikada bir defadan fazla istemeden pil tasarrufu yapın.

Aşağıdaki bölümlerde açıklandığı gibi, sensörsüz 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. Fused Location Provider (FLP) veya Wear Sağlık Hizmetleri'ni (WHS) kullanabilirsiniz. FLP bir Google Play Hizmetleri API'sidir.

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

  • Park edilmiş bir arabanın konumunu işaretleme gibi, sürekli değil, anlık konum verilerini kullanmak istersiniz.
  • Konumun sürekli olarak girilmesini istersiniz ancak konum geçmişine ihtiyacınız yoktur.

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

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

iPhone'larla eşlenen kol saatleri için iPhone'larla eşlenen kol saatleri için konum verileri bölümüne bakın.

Çok Kaynaklı Konum Sağlayıcısı'nı 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ünü inceleyin.

Konum güncellemesi isteğinde bulunma ve bir kullanıcının konumunu sürekli olarak izleme hakkında bilgi edinmek için Konum güncellemesi isteme başlıklı makaleyi inceleyin.

Yerleşik GPS'i algıla

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

Saatte yerleşik GPS sensörü olup olmadığını belirlemek 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ı kesme etkinliklerini yönetme

Yerleşik GPS sensörü yoksa ve telefonla olan bağlantısı kesilirse saat konum veri akışını kaybeder. Uygulamanız sürekli bir veri akışı bekliyorsa bağlantı kaybı olduğunu algılamalı, kullanıcıyı uyarmalı ve işlevselliğinin incelikle azalması gerekir.

Mobil cihazlarda olduğu gibi, FusedLocationProviderClient.requestLocationUpdates() kullanarak konum güncellemesi isteğinde bulunduğunuzda bir LocationCallback veya PendingIntent iletilir. Bu bilgilerin ikisi de konum bilgilerini ve LocationAvailability durumunu içerir.

LocationCallback seçeneğini kullanırken, konumun müsaitlik durumuyla ilgili güncellemeleri almak için onLocationAvailability() seçeneğini geçersiz kılın.

PendingIntent seçeneğini kullandığınızda Intent döndürüldüğünde 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ının kol saatinin bilinen son konumunu alabilirsiniz. Bilinen son konumu almak, bir GPS düzeltmesi alamadığınızda ve kol saatinin yerleşik GPS'i yoksa ve telefonla bağlantısı kesildiğinde faydalıdır. Daha fazla bilgi için Bilinen son konumu alma bölümüne bakın.

Toplu çağrılarla konumu boşalt

Toplu çağrılar kullanıyorsanız ekran tekrar açıldığında veya ambiyans modundan döndüğünde flushLocations() numarasını çağırın. Böylece, toplu konumları anında kayıtlı tüm LocationListeners, LocationCallbacks ve Pending Intents özelliklerine döndürebilirsiniz.