Wear OS'te ağ erişimi ve senkronizasyon

Wear OS by Google sayesinde saat, Android veya iOS telefona erişim olmadan doğrudan ağla iletişim kurabilir. Bir Wear OS uygulamasını ağa bağlamak için Veri Katmanı API'sini kullanmayın. Bunun yerine, bu kılavuzdaki yönergeleri ve adımları uygulayın.

Ağ erişimi

Wear OS uygulamaları ağ isteğinde bulunabilir. Saatin bir telefona Bluetooth bağlantısı varsa saatin ağ trafiği genellikle telefon üzerinden proxy gerçekleştirilir.

Bir telefon kullanılamadığında, saatin donanımına bağlı olarak kablosuz ve hücresel ağlar kullanılır. Ağlar arasındaki geçişler Wear OS platformu tarafından işlenir.

HTTP, TCP ve UDP gibi protokoller kullanabilirsiniz. Ancak CookieManager sınıfı dahil android.webkit API'leri kullanılamaz. İstek ve yanıtlarda üst bilgileri okuyup yazarak çerezleri kullanabilirsiniz.

Ayrıca düzenli aralıklarla yoklama da dahil olmak üzere, eşzamansız istekler için WorkManager API'yi kullanmanızı öneririz.

Belirli ağ türlerine bağlanmanız gerekiyorsa Ağ durumunu okuma bölümünü inceleyin.

Yüksek bant genişliğinde ağ erişimi

Wear OS platformu, genel olarak en iyi kullanıcı deneyimini sağlamak amacıyla ağ bağlantısını yönetir. Platform, iki ihtiyacı dengeleyerek varsayılan etkin ağı seçer:

  • Uzun pil ömrü
  • Ağ bant genişliği

Pil korumaya öncelik verildiğinde etkin ağ, büyük dosyaları taşıma veya medya akışı gibi ağ görevleri için yeterli bant genişliğine sahip olmayabilir.

Bu bölümde, uygulamanızın ihtiyaç duyduğu ağ bant genişliğine sahip olduğundan emin olmak için ConnectivityManager sınıfının kullanılmasıyla ilgili yol gösterici bilgiler sağlanmaktadır. Ağ kaynakları üzerinde ayrıntılı denetim hakkında genel bilgi için Ağ kullanımını yönetme bölümünü inceleyin.

Kablosuz bağlantı isteğinde bulunun

Büyük dosyaların veya medya akışının taşınması gibi yüksek bant genişliğine sahip ağ erişimi gerektiren kullanım alanlarında kablosuz ağ gibi yüksek bant genişliğine sahip aktarımla bağlantı isteğinde bulunun. Bu, aşağıdaki örnekte gösterilmektedir:

Kotlin

val callback = object : ConnectivityManager.NetworkCallback() {
    override fun onAvailable(network: Network) {
        super.onAvailable(network)
        // The Wi-Fi network has been acquired. Bind it to use this network by default.
        connectivityManager.bindProcessToNetwork(network)
    }

    override fun onLost(network: Network) {
        super.onLost(network)
        // Called when a network disconnects or otherwise no longer satisfies this request or callback.
    }
}
connectivityManager.requestNetwork(
    NetworkRequest.Builder().addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build(),
    callback
)

Java

ConnectivityManager.NetworkCallback callback = new ConnectivityManager.NetworkCallback() {
    public void onAvailable(Network network) {
        super.onAvailable(network);
        // The Wi-Fi network has been acquired. Bind it to use this network by default.
        connectivityManager.bindProcessToNetwork(network);
    }

    public void onLost(Network network) {
        super.onLost(network);
        // Called when a network disconnects or otherwise no longer satisfies this request or callback.
    }
};
connectivityManager.requestNetwork(
        new NetworkRequest.Builder().addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build(),
        callback
);

Saatin kablosuz veya hücresel radyosu kapalı olduğundan pil tasarrufu yapmak için bir ağ edinme işlemi anında gerçekleşmeyebilir. Saat bir ağa bağlanamıyorsa NetworkCallback örneğinizin onAvailable() yöntemi çağrılmaz.

onAvailable() çağrıldıktan sonra, NetworkCallback serbest bırakılana kadar cihaz kablosuz ağa bağlı kalmaya çalışır. Artık bir kablosuz ağa ihtiyacınız olmadığında pil ömrünü korumak için geri çağırmayı aşağıdaki örnekte gösterildiği gibi bırakın.

Kotlin

connectivityManager.bindProcessToNetwork(null)
connectivityManager.unregisterNetworkCallback(callback)

Java

connectivityManager.bindProcessToNetwork(null);
connectivityManager.unregisterNetworkCallback(callback);

Kablosuz ayarları etkinliğini başlatma

Kablosuz ağ isteğinde bulunurken sistem, yapılandırılmış ve kapsama alanındaysa kayıtlı bir ağa bağlanmaya çalışır. Kayıtlı kablosuz ağ yoksa NetworkCallback örneğinizin onAvailable() geri çağırma yöntemi çağrılmaz.

Ağ isteğini zaman aşımına uğratmak için bir Handler kullanıyorsanız zaman aşımı gerçekleştiğinde kullanıcıyı kablosuz ağ eklemeye yönlendirebilirsiniz. Aşağıdaki amacı kullanarak kablosuz ağ eklemek için kullanıcıyı doğrudan etkinliğe gönderin:

Kotlin

context.startActivity(Intent("com.google.android.clockwork.settings.connectivity.wifi.ADD_NETWORK_SETTINGS"))

Java

context.startActivity(new Intent("com.google.android.clockwork.settings.connectivity.wifi.ADD_NETWORK_SETTINGS"));

Ayarlar etkinliğini başlatmak için uygulamanızın şu izne sahip olması gerekir: android.permission.CHANGE_WIFI_STATE.

Kullanıcı arayüzüyle ilgili dikkat edilmesi gereken noktalar

Uygulamanız yüksek bant genişliğine sahip bir işlem için yeni bir kablosuz ağa bağlanmayı gerektiriyorsa kablosuz ağ ayarlarını başlatmadan önce bağlantı nedeninin kullanıcı tarafından netleştirildiğinden emin olun. Yalnızca yüksek bant genişliğine sahip ağ gerektiğinde kullanıcıdan yeni bir kablosuz ağ eklemesini isteyin. Kullanıcının, yüksek bant genişliğine sahip ağ gerektirmeyen uygulama özelliklerine erişmesini engellemeyin.

Şekil 1'de bir müzik uygulaması gösterilmektedir. Uygulama, kullanıcının daha düşük bant genişliğine sahip bir ağda müziklere göz atmasına olanak tanır ve kullanıcının yalnızca müzik indirmek veya canlı çalmak için yeni bir kablosuz ağ eklemesini gerektirir.

Müzik indiriliyor

Şekil 1. Müzik indirmeye yönelik bir müzik uygulaması akışı.

Güç ve veri kullanımıyla ilgili dikkat edilmesi gerekenler

Pil ömrünü korumaya ve hücresel veri kullanımını en aza indirmeye yardımcı olmak için analiz raporlaması veya günlük toplama gibi önemsiz ağ görevlerini, Wear OS cihaz yeniden Bluetooth veya kablosuz bağlantı kurana kadar erteleyin.

Cloud Messaging

Uygulamalar, bildirim göndermek için doğrudan Firebase Cloud Messaging (FCM) özelliğini kullanabilir.

Ağ erişimine veya FCM'ye yönelik API'ler, Wear OS'e özel değildir. Ağa bağlanma ve bulut mesajlaşması ile ilgili mevcut belgeleri inceleyin.

FCM, Doz ile iyi çalışır ve bir saate bildirim göndermek için önerilen yöntemdir.

Wear OS uygulamanız çalıştığında cihaz için kayıt jetonu toplayarak FCM'den mesaj sağlayın. Ardından, sunucunuz FCM REST uç noktasına mesaj gönderdiğinde jetonu hedefin bir parçası olarak ekleyin. FCM, jetonla tanımlanan cihaza mesaj gönderir.

Bir FCM mesajı, JavaScript Object Notation (JSON) biçimindedir ve aşağıdaki yüklerden birini veya her ikisini içerebilir:

  • Bildirim yükü: Bir saat tarafından bildirim yükü alındığında, veriler doğrudan bildirim akışında kullanıcıya gösterilir. Kullanıcı bildirime dokunduğunda uygulamanız başlatılır.
  • Veri yükü: Yükün bir dizi özel anahtar veya değer çifti vardır. Yük, Wear OS uygulamanıza veri olarak gönderilir.

Daha fazla bilgi ve yük örnekleri için FCM mesajları hakkında bölümüne bakın.

Bildirimler varsayılan olarak bir telefon uygulamasından kol saatine köprü modundadır. Bağımsız bir Wear OS uygulamanız ve buna karşılık gelen bir telefon uygulamanız varsa yinelenen bildirimler alabilirsiniz. Örneğin, FCM'den hem telefon hem de kol saati tarafından alınan tek bir bildirim her iki cihaz tarafından da bağımsız olarak görüntülenebilirdi. Köprü API'leri kullanarak bunu önleyebilirsiniz.

Arka plan hizmetlerini kullanma

Arka plan görevlerinin doğru şekilde yürütülmesine yardımcı olmak için Doz ve Uygulama Bekletme'yi dikkate almaları gerekir.

Bir ekran kapandığında veya yeterince uzun bir süre ambiyans moduna girdiğinde, bir Doz alt kümesi gerçekleşebilir ve arka plan görevleri belirli süreler için ertelenebilir. Daha sonra, cihaz uzun bir süre hareketsiz kalırsa normal Doz işlemi gerçekleşir. İstekleri WorkManager API ile planlayın. Bu API, uygulamanızın Doz güvenli kod yürütmeye kaydolmasını sağlar.

Kısıtlamalarla program yapın

İstekleri, pil ömrünü koruyacak şekilde yapılandırmak için kısıtlamalar kullanabilirsiniz. İsteklerinize dahil edilecek aşağıdaki kısıtlamalardan birini veya daha fazlasını seçin:

  • Ağ iletişimi gerektiren bir istek planlayın. NetworkType özelliğinin CONNECTED veya UNMETERED olduğunu belirtin. UNMETERED büyük veri aktarımları, CONNECTED ise küçük aktarımlar içindir.
  • Şarj olurken istek planlayın.
  • Cihaz boştayken bir istek planlayın. Bu özellik, özellikle cihaz şarj olurken, düşük öncelikli arka plan işleri veya senkronizasyon için kullanışlıdır.

Bluetooth LE gibi bazı düşük bant genişlikli ağların sınırlı olarak kabul edildiğini unutmayın.

Daha fazla bilgi için WorkManager'ın kısıtlamaların periyodik çalışma üzerindeki etkisi kılavuzunu inceleyin.