- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我尝试通过 STREAM_RING 播放声音或文本转语音声音并且我的耳机已插入时,声音将同时在扬声器和耳机上播放。这似乎是 Android 框架的默认行为,但我希望在插入耳机时仅在耳机上播放声音。
所以我尝试在播放声音之前像这样控制扬声器状态。
AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
am.setSpeakerphoneOn(false);
但这还不够,无法在我的 Nexus5(Kitkat 4.4.4) 上运行。经过一番谷歌搜索后,我发现一些解决方案建议使用 AudioManager#setMode(int)。所以代码会是这样的。
AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
am.setMode(AudioManager.MODE_IN_CALL);
am.setSpeakerphoneOn(false);
基本上这段代码可以满足我的要求,但声音不稳定,经常断断续续。事实证明,下面的代码完全没问题,声音没有间断。
AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
am.setMode(AudioManager.MODE_INVALID);
am.setSpeakerphoneOn(false);
我不知道为什么 MODE_IN_CALL 导致声音不稳定而 MODE_INVALID 效果很好。首先,我不知道为什么我应该调用 AudioManager#setMode(int) 来关闭扬声器。
有人知道吗? Android 官方引用资料对这些行为只字未提,所以我无法清楚地理解它们。
当然,我已经声明了
最佳答案
如果您尝试播放流为 STREAM_MUSIC 且模式为 MODE_NORMAL 的音频,那么在您插入和取下耳机后,Android 框架将只处理音频路由到扬声器和耳机。个人从未使用过 setMode(AudioManager.MODE_INVALID),我想你永远不应该使用那个模式。我从上面的代码中不清楚你的流类型。在我的 Github 存储库中找到基本的音频路由:https://github.com/sauravpradhan/Basic-Audio-Routing您可以根据代码实现您的路由逻辑。
关于java - setSpeakerphoneOn 的奇怪 AudioManager 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26670001/
每当我使用它时,它都会使我的应用程序崩溃。此外,对于振动模式,当我使用audioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE)时,它会打
我正在尝试获取 ring 音量,但它总是给出 0,不管 我将其设置为多少音量(我通过“设置”访问它来做到这一点在电话里)。 audioManager.getstreamVolume(AudioMana
我正在制作一个说出来电者姓名的应用程序,该应用程序在使用 TextToSpeech 说出来电者姓名之前暂停铃声。我正在使用 检测当前的 Volume int musicVolume = audioMa
调用 AudioManager.setRingerMode 有什么区别?调用AudioManager.setStreamMute(AudioManager.STREAM_VOICE_CALL, ...
我正在尝试在通话时启用扬声器: final AudioManager audioManager = (AudioManager) context.getSystemService(Context.AU
AudioManager中有几种流类型.他们在低水平上有何不同?难道是使用例如AudioManager.STREAM_MUSIC 阻止输入麦克风流?还是别的? 最佳答案 一个最显着的区别是音量控制。
我尝试在播放媒体时通过 setMode(mode_in_call) 更改音频模式。所以,我确定我添加了权限 我这样写代码:AudioManager mAudioManager = (AudioMana
我的 getVolume() 方法总是返回 1.0。我已将手机静音,更改了音量,但是当我调用我的方法时,我随时都会收到 1f。我错过了什么吗? btnPlay.setOnClickListener(n
在进行视频聊天的 WebRT 应用程序中,我想将手机设置为使用免提而不是耳机播放声音。 我尝试过使用AppRTCAudioManager(它包装了AudioManager)来设置静音和设置扬声器,直接
通过按后退按钮关闭我的 Activity 后,我面临内存泄漏: 由于我无法弄清楚它是什么,所以我将几乎整个代码注释为: protected void onCreate(Bundle savedInst
安卓AudioManager有方法public void setStreamVolume (int streamType, int index, int flags) . 我不想使用任何标志,因为它们
我在 Activity 中执行以下代码来设置铃声模式和值: void setRinger(int value) { AudioManager manager = (AudioManager)t
当文本到语音系统说出一个短语时,我试图让音频播放器静音。正如预期的那样,audiomanager 在请求音频焦点时降低音量,但在调用 abandonAudioFocus 时,音量不会恢复并且不会调用
我在第 219 行收到空指针异常:amanager.setStreamMute(AudioManager.STREAM_NOTIFICATION, true);。以前没有发生过,今天我第一次看到,我使
AudioManager am = (AudioManager)getSystemService(Context.AUDIO_SERVICE); switch (am.getRingerMode())
当使用以下代码建立电话调用时,我通过附件设置扬声器: audioManager.setMode(AudioManager.MODE_IN_CALL); audioManager.setSpeakerp
在我的 Android 应用程序中,我有一个方法,可以让我调整音量。这就像它应该的那样工作。 public void adjustVolume(int adjustType){ if(myAu
在我正在开发的应用程序中,当前台服务发生更新时,我们必须通过蜂鸣声通知用户。 我们使用这个 foreground service用于录音。要播放哔哔声,我们使用扬声器。我们在播放 beep 之前启用电
我正在构建一个媒体播放器并以类似于文档的方式实现 onAudioFocusChange(): OnAudioFocusChangeListener afChangeListener = new OnA
我正在使用 AudioManager 在调用电话之前通过听筒播放声音,因此我使用 AudioManager setMode(MODE_IN_CALL)。 我没有遇到任何问题,除了在 Galaxy S3
我是一名优秀的程序员,十分优秀!