управление громкостью в MediaPlayer - PullRequest
4 голосов
/ 19 июля 2011

Я играю аудио (повествование) в аудиокниге.Аудиофайлы имеют формат .ogg, длительностью от 10 до 15 секунд каждый.

Изменить, чтобы добавить: Я использую Android 2.2, API 8, и у меня есть это в моем манифесте:

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

У меня есть setVolumeControlStream (AudioManager.STREAM_MUSIC); в моем методе onCreate ().

Мои звуки воспроизводятся с помощью кода, подобного следующему:

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 и считая!), Что просто нужно setVolumeControlStream (AudioManager.STREAM_MUSIC); в onCreate (), мои звуки не меняются в объеме, когда я нажимаю громкостьклавиш на моем устройстве (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 Ответ

6 голосов
/ 08 августа 2011

Убедитесь, что вы не возвращаете true каждый раз, когда вызывается onKeyDown.Если это так, то вы говорите Android, что вы будете обрабатывать все события onKeyDown, поэтому Android может игнорировать клавишу громкости.

...