控制MediaPlayer中的音量

时间:2011-07-19 04:02:21

标签: android media-player volume

我在有声读物中播放音频(旁白)。音频文件采用.ogg格式,每个文件长度为10到15秒。

编辑添加:我正在使用Android 2.2,API 8,我在我的Manifest中有这个:

<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();

但是,尽管在onCreate()中只需要setVolumeControlStream(AudioManager.STREAM_MUSIC);的更多保证(33并计数!),当我按下设备上的音量键(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有关,但我应该calculating stream volume而不是在我上面的第一个代码示例中使用mp.setVolume(1, 1);吗?

1 个答案:

答案 0 :(得分:6)

检查以确保每次调用onKeyDown时都不会返回true。如果是这种情况,那么你告诉android你将处理所有onKeyDown事件,因此android可能会忽略音量键。