Farklı ses arabirimli gözlük ve görüntü arabirimli gözlük türlerinin farklı özellikleri vardır. Farklı yapay zeka cihaz türlerini nasıl destekleyeceğinizi planladıktan sonra, kullanıcının cihazı için en iyi deneyimi sunmak üzere çalışma zamanında cihaz özelliklerini kontrol edebilirsiniz.
Cihazın ekranı olup olmadığını kontrol etme
Görüntülü gözlükler, Jetpack Compose Glimmer ile oluşturulmuş kullanıcı arayüzlerini gösterebilir. Aşağıdaki örnekte, gözlük cihazında ekran olup olmadığının nasıl kontrol edileceği gösterilmektedir:
// Check device capabilities val projectedDeviceController = ProjectedDeviceController.create(this@ProjectedMainActivity) isVisualUiSupported = projectedDeviceController.capabilities.contains(CAPABILITY_VISUAL_UI)
Ekran durumu değişikliklerine tepki verme
Görüntülü gözlüklerde ekran zaman aşımına uğrayabilir veya kullanıcı ekranı kapatabilir. Ekran açık veya kapalıyken çalışan etkinlikler tasarlamak için ekran durumu değiştiğinde bildirim almak üzere addPresentationModeChangedListener kullanın. Etkinliğinizi, görüntüleme durumuna bağlı olarak uygun miktarda ses bilgisi için ayarlayabilirsiniz.
ProjectedDisplayController.create(activity).addPresentationModeChangedListener {
presentationModeFlags ->
val areVisualsOff = !presentationModeFlags.hasPresentationMode(VISUALS_ON)
}
Ekranı açık tutma
Görüntülü gözlüklerde, addLayoutParamsFlags kullanarak sistemin ekranı açık tutmasını ve ekranın zaman aşımına uğramasını önlemesini isteyebilirsiniz.
var projectedDisplayController = ProjectedDisplayController.create(activity)
projectedDisplayController.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
Pil durumu değişikliklerini izleme
Bağlı ses veya görüntülü gözlüklerin anlık pil durumunu takip etmek için ProjectedDeviceController tarafından sağlanan addBatteryStateChangedListener yöntemini kullanın. Bu dinleyici, pil seviyesi veya şarj durumu değiştiğinde uygulamanızı bilgilendirerek uygulama performansını optimize etmenize, güç tasarrufu modlarını etkinleştirmenize veya kullanıcı arayüzünüzü güncellemenize olanak tanır.
@OptIn(ExperimentalProjectedApi::class) private var deviceController: ProjectedDeviceController? = null private val batteryListener = { batteryState: BatteryState -> val batteryLevel = batteryState.batteryLevel val isCharging = batteryState.isCharging if (batteryLevel <= 15 && !isCharging) { switchToLowPowerMode() } updateBatteryUi(batteryLevel, isCharging) } // ... @OptIn(ExperimentalProjectedApi::class) private fun monitorBatteryStatus() { lifecycleScope.launch { try { if (deviceController == null) { deviceController = ProjectedDeviceController.create(this@PhoneMainActivity) } if (lifecycle.currentState.isAtLeast(Lifecycle.State.RESUMED)) { deviceController?.addBatteryStateChangedListener(coroutineContext, batteryListener) } } catch (e: Exception) { Log.e("BatteryMonitor", "Unexpected error: ${e.message}") } } }
Cihazı izlemeyi tamamladığınızda veya bileşeniniz imha edilirken temel kaynakları düzgün bir şekilde serbest bırakmak için ProjectedDeviceController üzerinde close yöntemini çağırın.
@OptIn(ExperimentalProjectedApi::class) override fun onDestroy() { super.onDestroy() // Unregisters the active listeners deviceController?.close() deviceController = null }
Ayrıca, kapsam sona ermeden önce removeBatteryStateChangedListener kullanarak bir dinleyicinin kaydını açıkça iptal edebilirsiniz.
@OptIn(ExperimentalProjectedApi::class) override fun onPause() { super.onPause() // Explicitly unregister the listener when it is no longer needed deviceController?.removeBatteryStateChangedListener(batteryListener) }