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ü kullanırken gözlüğün ana cihaza (ö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. Bu API'yi kullanarak ses yönlendirmeyi ve hazır kelime etkinleştirmeyi yönetebilir, gözlüğün ne zaman kullanılabileceğine bağlı olarak kullanıcı girişinin ne zaman bekleneceğini öğrenebilirsiniz.

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 olmalıdır.

DESTROYED

Bağlantı kesildi

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

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 işlevini çağırın ve bu bağlamı XrDevice örneğinize ilettiğinizden emin olun.
  • Bağlam geçersiz kılmayı işleme: 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 düzgün bir şekilde yönetin. Örneğin, durum STARTED'dan CREATED'ye geri döndüğünde 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.