在MediaPlayer中控制音量

4
我正在播放有声读物中的音频(旁白)。音频文件为.ogg格式,每个文件长度在10至15秒之间。
编辑添加:我正在使用Android 2.2,API 8,并且在我的清单文件中有这个内容:
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

我在 onCreate() 方法中使用了 setVolumeControlStream(AudioManager.STREAM_MUSIC); 来设置音量控制流。

我的声音是通过类似以下代码播放的:

mp = MediaPlayer.create(mContext, resource);
mp.setOnCompletionListener(this);
mp.seekTo(0);
mp.setLooping(looping);
if(isSoundEnabled())
{
    mp.setVolume(1, 1);
}
else
{
    // I still need sounds to call their onComplete listeners to drive action
    mp.setVolume(0,0);
}
nowPlaying = true;
mp.start();

但是,尽管有更多的保证(已经有33个了!)只需要在onCreate()中加入setVolumeControlStream(AudioManager.STREAM_MUSIC);,但当我按下设备(Motorola Xoom)上的音量键时,我的声音并没有改变。

为了验证我的音量键确实在起作用,我重写了onKeyDown

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    boolean result = true;
    if (keyCode == KeyEvent.KEYCODE_VOLUME_UP)
    {
        DebugLog.d(TAG, "volume up");
    }
    else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN)
    {
        DebugLog.d(TAG, "volume down");
    }
}

并通过LogCat确认我按下了正确的音量键:

07-19 12:16:31.440: DEBUG/BookReader(17830): volume down; thread 1
07-19 12:16:31.710: DEBUG/BookReader(17830): volume down; thread 1
07-19 12:16:31.980: DEBUG/BookReader(17830): volume down; thread 1
07-19 12:16:32.440: DEBUG/BookReader(17830): volume up; thread 1
07-19 12:16:32.820: DEBUG/BookReader(17830): volume up; thread 1

尽管下面的链接与SoundPool有关,但在我上面的第一个代码示例中,我应该使用计算流音量而不是使用mp.setVolume(1, 1);吗?
1个回答

7

请确保每次调用onKeyDown时不是返回true。如果这样的话,你就告诉Android你将处理所有的onKeyDown事件,因此Android可能会忽略音量键。


2
哦,我的天!我简直不敢相信我一直在做这个。这让我苦恼了这么长时间!!!!!! - Thunder Rabbit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接