开发者

controlling volume in MediaPlayer

开发者 https://www.devze.com 2023-03-21 11:00 出处:网络
I\'m p开发者_运维问答laying audio (narration) in an audiobook.The audio files are in .ogg format, between 10 and 15 seconds long each.

I'm p开发者_运维问答laying audio (narration) in an audiobook. The audio files are in .ogg format, between 10 and 15 seconds long each.

Edit to add: I'm using Android 2.2, API 8, and I have this in my Manifest:

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

I've got setVolumeControlStream(AudioManager.STREAM_MUSIC); in my onCreate() method.

My sounds are being played via code similar to this:

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

But, despite more assurances (33 and counting!) that one simply needs setVolumeControlStream(AudioManager.STREAM_MUSIC); in onCreate(), my sounds don't change in volume when I press the volume keys on my device (Motorola Xoom).

To verify my volume keys were doing something, I overrode 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");
    }
}

and confirmed via LogCat that I'm pressing the correct volume keys:

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

Though the following link is about SoundPool, should I be calculating stream volume instead of using mp.setVolume(1, 1); in my first code sample above?


Check to make sure you're not returning true every time onKeyDown is called. If that's the case then you're telling android that you'll handle all onKeyDown events, so android might be ignoring the volume key.

0

精彩评论

暂无评论...
验证码 换一张
取 消