Контролирующий объем в MediaPlayer

Я играю аудио (повествование) в аудиокниге. Аудиофайлы находятся в формате .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 и подсчета!), Нужно просто установитьVolumeControlStream (AudioManager.STREAM_MUSIC); In onCreate (), мои звуки не меняются громкостью, когда я нажимаю клавиши регулировки громкости на своем устройстве (Motorola Xoom).

Чтобы проверить, что мои клавиши onKeyDown громкости делали что-то , я 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); В моем первом примере кода выше?

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