【问题标题】:Why AudioManager works for Phone, but not for Android TV emulator?为什么 AudioManager 适用于手机,但不适用于 Android TV 模拟器?
【发布时间】:2020-12-08 22:14:19
【问题描述】:

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

audioManager = getSystemService(Context.AUDIO_SERVICE) as AudioManager

我对 onKeyDown() 的反应如下:

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 Emulator 上运行此应用时,链接代码不起作用,并且我看到音量的库存 UI。

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

但是,我怎样才能截获声级。也是通过拦截密炼机.. 但是怎么做呢?

【问题讨论】:

    标签: android android-audiomanager


    【解决方案1】:

    Android TV 不会向应用程序公开 volume_up/volume_down 按钮。

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-15
      相关资源
      最近更新 更多