如何在我的Android应用程序中正确pipe理audio卷?

我有一个应用程序,当它的活动打开时播放断断续续的声音,用户总是期待它发出这些噪音,但不幸的是它受音乐stream量的限制。 我发现的选项是这样的:

  1. 调整音乐stream的音量,如果他们碰巧正在播放音乐,可能会震惊用户。
  2. 调用MediaPlayer.setVolume(),如果音乐stream的音量为0,则无效。
  3. 手柄音量button按下自己,这performance出两个问题:音量button按下调整铃声音量,除非我的audio正在播放,我已经无法赶上使用我的OnKeyListener按音量button的onKey事件。 如果有某种方法可以在我的活动集中时强制调整应用于音乐stream,或者只需按下button就可以实现。
  4. 在背景中播放静音循环audio片段,以保持音乐stream的音量调整。

我认为第三个选项可能是最好的,因为它将音量控制权交给用户,但是如果有一种方法可以在单个媒体播放器实例中覆盖系统音量,那么也可以工作。

通过Google网上论坛得到了另外一个build议,这是我一直在寻找的平台集成解决scheme,工作正常:

请不要自己处理音量键 – 几乎不可能保证您不会打破音量键的行为。

在你的onCreate()中调用这个API:

setVolumeControlStream(AudioManager.STREAM_MUSIC);

这告诉AudioManager,当你的应用程序有焦点时,音量键应该调整音量。

这是有用的这个API:setVolumeControlStream(AudioManager.STREAM_MUSIC);

除非这样,否则我会花更多的时间来修复这个音量错误。

如果您正在使用“OnKeyDown”方法,则可以通过执行以下操作来解决此问题:

public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_VOLUME_UP || keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) { setVolumeControlStream(AudioManager.STREAM_MUSIC);}} 

如果您重写了一个activity的onKeyDown(int keycode,KeyEvent event)方法,这将无济于事。