Bağımsız cihazlarda doğrudan bir ağ üzerinden iletişim kurun

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

Ağ erişimi

Wear OS uygulamaları ağ istekleri yapabilir. Saatin telefonla Bluetooth bağlantısı olduğunda, saatin ağ trafiği genellikle telefon üzerinden proxy'si ile aktarılır.

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şleri Wear OS platformu yönetir.

HTTP, TCP ve UDP gibi protokolleri kullanabilirsiniz. Ancak CookieManager sınıfı dahil olmak üzere android.webkit API'leri kullanılamaz. İstek ve yanıtların başlıklarını okuyup yazarak çerezleri kullanabilirsiniz.

Düzenli aralıklarla yoklama dahil olmak üzere eşzamansız istekler için WorkManager kullanın.

Belirli ağ türlerine bağlanmanız gerekiyorsa Ağ durumu 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 için ağ bağlantısını yönetir. Platform, iki ihtiyacı (uzun pil ömrü ve ağ bant genişliği) dengeleyerek varsayılan etkin ağı seçer.

Pil korumasına öncelik verildiğinde etkin ağ, büyük dosyaları veya medya akış içeriğini taşımak 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ı kullanma konusunda yol gösterici bilgiler verilmektedir. Ağ kaynakları üzerinde ayrıntılı denetim hakkında genel bilgi için ağ kullanımını yönetme bölümüne bakın.

Kablosuz bağlantı isteyin

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ı için kablosuz bağlantı gibi yüksek bant genişliğine sahip bir 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, pili korumak için kapalı olabileceğinden bir ağın edinilmesi 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. Kablosuz ağa artık ihtiyacınız kalmadığında pil ömrünü korumak için geri çağırma özelliğini 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şlat

Kablosuz ağ isteğinde bulunurken sistem, yapılandırılmış ve kapsama alanında olan kayıtlı bir ağa bağlanmaya çalışır. Kayıtlı bir 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ı olduğunda kullanıcıyı bir kablosuz ağ eklemeye yönlendirebilirsiniz. Aşağıdaki amacı kullanarak kullanıcıyı doğrudan kablosuz ağ ekleme etkinliğine 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"));

Ayar etkinliğini başlatmak için uygulamanızın CHANGE_WIFI_STATE iznine sahip olması gerekir.

Kullanıcı arayüzü ile 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ğlanma nedeninin kullanıcı için net olduğundan emin olun. Yalnızca yüksek bant genişliğine sahip ağ gerekli olduğunda kullanıcıdan yeni bir kablosuz ağ eklemesini isteyin. Kullanıcının yüksek bant genişliğinde 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 yalnızca müzik indirmek veya çalmak istediğinde kullanıcının yeni bir kablosuz ağ eklemesini gerektirir.

Müzik indiriliyor

Şekil 1. Müzik indirmek için kullanılan bir müzik uygulaması akışı.

Güç ve veri kullanımı konusunda dikkat edilmesi gereken noktalar

Pil ömrünü korumaya ve mobil veri kullanımını en aza indirmeye yardımcı olmak için Wear OS cihazı, LTE veya sayaçlı bağlantı yerine Bluetooth ya da kablosuz ağ bağlantısını tekrar kurana kadar, analiz raporlaması veya günlük toplama gibi ağ bağlantısı gerektirmeyen görevleri erteleyin.

Bulut mesajlaşma

Bildirim göndermek için doğrudan Firebase Cloud Messaging (FCM) uygulamasını kullanın.

Wear OS'e özgü ağ erişimi veya FCM API'leri yoktur. Ağa bağlanma ve bulut üzerinden mesajlaşma ile ilgili mevcut belgeleri inceleyin.

FCM, Doze ile iyi bir şekilde ç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 gelen mesajları 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 mesajlar gönderir.

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

  • Bildirim yükü: Bir kol saati tarafından bir 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ükte bir dizi özel anahtar veya değer çifti bulunduğunda. Yük, Wear OS uygulamanıza veri olarak iletilir.

Daha fazla bilgi ve yük örnekleri için FCM mesajları hakkında başlıklı makaleye bakın.

Varsayılan olarak bildirimler, telefon uygulamasından kol saatine geçiş yapar. Bağımsız bir Wear OS uygulamanız ve buna karşılık gelen bir telefon uygulamanız varsa yinelenen bildirimler oluşabilir. Örneğin, FCM'nin hem telefon hem de kol saati tarafından alınan tek bir bildirimi her iki cihazda da ayrı ayrı gösterilebilir. Köprü API'leri kullanarak bunu önleyebilirsiniz.

Arka plan hizmetlerini kullan

Arka plan görevlerinin doğru şekilde yürütülmesini sağlamak için Doz ve Uygulamayı Beklemeye Alma özelliklerinin hesaba katılması gerekir.

Ekran kapandığında veya yeterince uzun süre ambiyans moduna girdiğinde, bir Doz alt kümesi gerçekleşebilir ve arka plan görevleri belirli süreler boyunca ertelenebilir. Daha sonra, cihaz uzun bir süre hareketsiz kaldığında normal Doz işlemi gerçekleşir. Uygulamanızın Doz güvenli kod yürütmeye kaydolmasını sağlayan WorkManager API ile istekleri planlayın.

Kısıtlamalarla planlama

Kısıtlamaları kullanarak istekleri pil ömrünü koruyacak şekilde yapılandırabilirsiniz. İ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 öğesinin CONNECTED veya UNMETERED olduğunu belirtin. UNMETERED büyük veri aktarımları için, CONNECTED ise küçük aktarımlar içindir.

  • Şarj işlemi sırasında bir istek planlayın.

  • Cihaz boştayken istek planlayın. Bu özellik, özellikle cihaz şarj olurken düşük öncelikli arka plan çalışmaları veya senkronizasyon için faydalıdır.

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