Ses gözlükleri ve ekran gözlükleri için çalışma zamanında cihazın kullanılabilirliğini kontrol etme

Uygun XR cihazlar
Bu kılavuz, bu tür XR cihazlar için deneyimler oluşturmanıza yardımcı olur.
Ses ve
Ekran Gözlükleri

Kullanıcı gün içinde sesli gözlüğünü veya ekranlı gözlüğünü taktığında gözlüğün ana cihazla (ör. kullanıcının telefonu) bağlantısı kesilebilir ya da gözlüğünü çıkardığında gözlük geçici olarak kullanılamayabilir. Cihaz kullanılabilirliğindeki bu tür değişiklikleri hesaba katmak için uygulamanız, cihaz kullanılabilirlik sinyallerini standart Android Lifecycle.State değerlerinde birleştiren XR Device Availability API'yi kullanabilir. Ses yönlendirmeyi ve etkinleştirme kelimesini yönetmeye yardımcı olmak için bu API'yi kullanın. Ayrıca, gözlüğün ne zaman kullanılabileceğine bağlı olarak kullanıcı girişinin ne zaman bekleneceğini öğrenin.

Yaşam döngüsü durumlarını anlama

Aşağıdaki tabloda, cihaz kullanılabilirlik sinyallerinin Lifecycle.State değerleriyle nasıl eşlendiği listelenmektedir.

Yaşam döngüsü durumu

Cihaz durumu

Açıklama

INITIALIZED

oluşturuldu

Yaşam döngüsü nesnesi oluşturuldu ancak henüz gözlemlenmedi.

CREATED

Etkin değil

Hizmet bağlı ancak kullanıcı cihazı takmıyor.

STARTED

Etkin

Kullanıcı cihazı takıyor.

DESTROYED

Bağlantı kesildi

Cihazın bağlantısı kesildiğinde veya hizmet bağlantısı kaybolduğunda.

RESUMED

Yok

Cihaz yaşam döngüsünde şu anda bu durum kullanılmıyor veya bu durum yayılmıyor.

Cihaz kullanılabilirliğini kontrol etme ve izleme

Bir cihazın kullanılabilirliğini kontrol etmek ve izlemek için, uygulamanızın her durumu nasıl ele alması gerektiğini belirlemek üzere yaşam döngüsü durumuyla birlikte öngörülen bir bağlam kullanırsınız:

    // In your phone activity or service, check for projected device connection state before
    // attempting to create a projected device context and get the device lifecycle.
    ProjectedContext.isProjectedDeviceConnected(context, currentCoroutineContext())
        .flatMapLatest { isConnected ->
            if (isConnected) {
                try {
                    // Create the projected device context on connection
                    val projectedContext = ProjectedContext.createProjectedDeviceContext(context)
                    val xrDevice = XrDevice.getCurrentDevice(projectedContext)

                    // Get the device lifecycle
                    xrDevice.getLifecycle().currentStateFlow
                } catch (e: IllegalStateException) {
                    flowOf(Lifecycle.State.DESTROYED)
                }
            } else {
                flowOf(Lifecycle.State.DESTROYED)
            }
        }
        .collect { state ->
            when (state) {
                Lifecycle.State.STARTED -> { /* Device is available (worn) */ }
                Lifecycle.State.CREATED -> { /* Device is unavailable (not worn) */ }
                Lifecycle.State.DESTROYED -> { /* Device is disconnected from host phone */ }
                else -> { /* Handle other states */ }
            }
        }
}

Kodla ilgili önemli noktalar

  • Bağlantı olup olmadığını kontrol edin: Cihaz yaşam döngüsüne erişmeden önce, yansıtılan cihazın ana cihaza bağlı olduğunu doğrulamak için ProjectedContext.isProjectedDeviceConnected işlevini çağırın.
  • ProjectedContext alın: Yalnızca bağlantıyı doğruladıktan sonra ProjectedContext.createProjectedDeviceContext numaralı telefonu arayın ve bu bağlamı XrDevice örneğinize ilettiğinizden emin olun.
  • Bağlam geçersiz kılma işlemini gerçekleştirme: Yansıtılan bir cihaz her bağlandığında yeni bir deviceId oluşturulur. Durum DESTROYED'ya ulaştığında mevcut ProjectedContext geçersiz olur. Hemen kullanmayı bırakın ve yeni bir bağlantı bekleyin.
  • Pili ve kaynakları optimize etme: Sistem kaynaklarını korumak ve pil tüketimini azaltmak için uygulama işlevselliğini yaşam döngüsü durumuna göre sorunsuz bir şekilde yönetin. Örneğin, durum STARTED'dan CREATED'ye geçtiğinde kameranın veri akışı gibi gözlüğe özel kaynakları serbest bırakmanız gerekir. CREATED durumu, cihazın artık takılmadığını gösterir. Bu nedenle, gereksiz pilin hızlı tükenmesini önlemek ve kullanıcı gizliliğini desteklemek için bu işlemlerin durdurulması gerekir.