Ker*_*ora 3 android android-tv android-jetpack android-jetpack-compose android-jetpack-compose-tv
你好 Stack Overflow 社区,
我目前正在使用 Jetpack Compose 开发 Android TV 应用程序,但遇到了一个我似乎无法找到解决方案的问题。
在传统的 Android 开发中,我可以轻松地使用 AudioManager 类来处理系统声音。然而,随着过渡到 Jetpack Compose,我不知道如何做同样的事情。
这是我在传统视图系统中使用的典型方法:
AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
audioManager.playSoundEffect(Sounds.DISMISS);
Run Code Online (Sandbox Code Playgroud)
如何在 Jetpack Compose 中实现同等功能?任何帮助将不胜感激。如果需要任何其他信息,我非常乐意提供。
先感谢您。
(它不起作用:)
<resources>
<style name="Theme.xxx" parent="android:Theme.Material.Light.NoActionBar">
<item name="android:soundEffectsEnabled">true</item>
</style>
</resources>
Run Code Online (Sandbox Code Playgroud)
当某个项目获得焦点时,您通常需要声音效果。因此,您可以创建如下所示的自定义修饰符来执行此操作。
@Composable
fun Modifier.playSoundEffectOnFocus(
effectType: Int = AudioManager.FX_FOCUS_NAVIGATION_UP
): Modifier {
val context = LocalContext.current
val audioManager = remember {
context.getSystemService(Context.AUDIO_SERVICE) as AudioManager
}
return this
.onFocusChanged {
if (it.isFocused) {
audioManager.playSoundEffect(effectType)
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,您可以将其添加到任何可聚焦的项目中。
Jetpack Compose TV Material 3 Clickable Surface的使用示例:
Surface(
onClick = { },
modifier = Modifier.playSoundEffectOnFocus(),
) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
您可能还想在单击该项目时播放声音效果。为此,您可以创建一个可组合函数来按需播放音频并在onClick方法中使用它。
@Composable
fun getPlaySoundEffect(
effectType: Int = AudioManager.FX_FOCUS_NAVIGATION_UP
): () -> Unit {
val context = LocalContext.current
val audioManager = remember {
context.getSystemService(Context.AUDIO_SERVICE) as AudioManager
}
return { audioManager.playSoundEffect(effectType) }
}
Run Code Online (Sandbox Code Playgroud)
现在,您可以按如下方式使用它:
val playSoundEffect = getPlaySoundEffect()
Surface(
onClick = { playSoundEffect() },
modifier = Modifier.playSoundEffectOnFocus(),
) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
324 次 |
| 最近记录: |