android - 设备音量控制按钮不使用音频属性设置耳机音量 USAGE_VOICE_COMMUNICATION
问题描述
播放音频文件时,我将声音从外部扬声器切换到内部扬声器(耳机)。音频通过SimpleExoPlayer播放。通过USAGE_VOICE_COMMUNICATION属性进行切换。声音开始通过听筒播放,但此声音的音量不受系统音量按钮控制,系统中媒体的音量会发生变化。
我尝试将 setContentType 设置为 CONTENT_TYPE_SPEECH,问题仍然存在。
该问题在 Google Pixel XL (Android 10)、一加 7t (Android 10) 上再次出现。但在三星 Galaxy S9 (Android 10) 上没有重复。
进行这种切换以使正确扬声器的音量发生变化的正确方法是什么?
这是我的属性:
private fun setupAttributesWithExternalSpeaker() {
val audioAttributes = AudioAttributes.Builder()
.setContentType(C.CONTENT_TYPE_MUSIC)
.setUsage(C.USAGE_MEDIA)
.build()
simpleExoPlayer.setAudioAttributes(audioAttributes, true)
}
private fun setupAttributesWithInternalSpeaker() {
val audioAttributes = AudioAttributes.Builder()
.setContentType(C.CONTENT_TYPE_MUSIC)
.setUsage(C.USAGE_VOICE_COMMUNICATION)
.build()
simpleExoPlayer.setAudioAttributes(audioAttributes, false)
}
解决方案
如何使用 AudioManager.setMode
AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
am.setMode(AudioManager.MODE_IN_COMMUNICATION);
推荐阅读
- machine-learning - 如何在构建 ML 模型中使用有序分类变量?
- python - 通过数据框进行高效搜索
- python - 删除后刷新画布 - Tkinter
- codenameone - 将侧边菜单 a/c 中的命令突出显示到当前打开的屏幕
- java - 从 Firebase 数据库获取用户对象
- java - 错误 com.sap.xs2.security.commons.SAPOfflineTokenServices - 加载 JWT 库时出错
- string - 如何使用由多个字符组成的字符串在 PowerShell 中“拆分”字符串?
- tensorflow - TensorFlow.js 调整 3D 张量大小
- hadoop - HDFS 复制
- android - 如何在 TextInputLayout 内定位 imageButton