2011-07-19 196 views
4

我在播放有声读物中的音频(旁白)。音频文件格式为.ogg,每个格式为10到15秒。控制MediaPlayer中的音量

编辑补充:我使用的是Android 2.2系统,API 8,我有这在我的清单:

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> 

我已经在我的onCreate()方法得到setVolumeControlStream(AudioManager.STREAM_MUSIC);

我的声音正在通过类似的代码打出这样:(!33和计数)

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

但是,尽管有更多的保证,人们只需在setVolumeControlStream(AudioManager.STREAM_MUSIC);的onCreate(),我的声音不改变当我按下我的设备上的音量键(摩托罗拉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);

回答

6

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

+2

O M G 我不敢相信我就是这么做的。这令我烦恼了这么久!!!!!!!!!!! –