android - 为什么 AudioManager 适用于手机,但不适用于 Android TV 模拟器?

标签 android android-audiomanager

As one can read here , 我尝试调节音量。在这里我设置了 AudioManager:

audioManager = getSystemService(Context.AUDIO_SERVICE) as AudioManager

然后我对 onKeyDown() 做出如下 react :

override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
    when (event?.keyCode) {
        KeyEvent.KEYCODE_VOLUME_UP -> {
            adjustVolume()
            audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE)
            return true
        }
        KeyEvent.KEYCODE_VOLUME_DOWN -> {
            adjustVolume()
            audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_LOWER, AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE)
            return true
        }
        else -> {
            return super.onKeyDown(keyCode, event)
        }
    }
}

adjustVolume() 显示音量值。到目前为止,这适用于手机。我可以使用自己的 UI 调整音量,并且可以看到日志输出。

但是,当我在 Android TV 模拟器 上运行此应用时,链接的代码不起作用,我看到音量的库存 UI。

根据@I~nigos 的回答,内核已经在电视硬件级别“消耗”了按键事件。建议处理来自内部混音器的声音。

但是,我怎样才能截取声级。也通过拦截内部混合器.. 但是怎么做?

最佳答案

Android TV 不会向应用公开提高音量/降低音量按钮。

电视控件显示为方向键:请参阅 D-pad minimum controls

来自 Remote /硬件按钮的上/下事件在到达 Android 之前由电视硬件处理(这是有道理的,因为电视可能有其他依赖的功能)。

您可以通过 ADB 控制您的应用程序音量输出,提高/降低音量和使电视静音;但您无法获得此事件。

如何处理电视上的声音?电视内部有混音器。输出适当的音量(不是 100% 以避免某些设备失真)。

关于android - 为什么 AudioManager 适用于手机,但不适用于 Android TV 模拟器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65207708/

相关文章:

android - 我可以在另一个 Activity 中更新一个 Activity 中的 ListView 吗?

android - GLSurfaceView.onPause() 会破坏上下文吗?

android - 如何为特定来电提供自定义振动

android - Android 来电时如何停止音频播放

android - 同时播放两种声音

android - GPRS 追踪器可以直接与智能手机通信吗?

javascript - React Native 状态栏禁用 Android

android - AudioManager setStreamMute() 空指针异常

Android:当 AudioManager 中的当前模式发生变化时得到通知

Android:通过扩展 XML 动态添加布局