Изменить громкость мультимедиа в Android? - PullRequest
49 голосов
/ 14 ноября 2010

Можно ли изменить громкость носителя?и как?Я использовал это до сих пор:

setVolumeControlStream(AudioManager.STREAM_MUSIC);

Но есть панель поиска и хотите изменить громкость носителя, а не громкость звонка.

Так может кто-то показать мне, как просто изменить громкость носителя вonCreate() и я исправлю панель поиска позже.

Ответы [ 5 ]

84 голосов
/ 14 ноября 2010

Правильный метод для использования будет setStreamVolume на вашем AudioManager. Это может выглядеть так

AudioManager audioManager = 
    (AudioManager)getSystemService(Context.AUDIO_SERVICE);

audioManager.setStreamVolume(AudioManager.STREAM_MUSIC,
                             [int value],
                             [if desired a flag]);

Пример использования флага - получение звукового сигнала при настройке громкости, чтобы пользователь мог услышать результат. Флаг для этого будет AudioManager.FLAG_PLAY_SOUND.

Вы можете использовать AudioManager.FLAG_SHOW_UI, если вы не хотите воспроизводить звук, но отображаете тост с текущим значением. Использование должно получить обратную связь. Не имеет значения, слышно оно или визуально.

Чтобы получить максимальное допустимое значение для данного потока, вы просто вызываете getStreamMaxVolume() на AudioManager и получаете целое число обратно, которое представляет ... также максимальное действительное значение для тома.

36 голосов
/ 27 марта 2011
private AudioManager audio;

Внутри наСоздать:

audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

Переопределить onKeyDown:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    switch (keyCode) {
    case KeyEvent.KEYCODE_VOLUME_UP:
        audio.adjustStreamVolume(AudioManager.STREAM_MUSIC,
                AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);
        return true;
    case KeyEvent.KEYCODE_VOLUME_DOWN:
        audio.adjustStreamVolume(AudioManager.STREAM_MUSIC,
                AudioManager.ADJUST_LOWER, AudioManager.FLAG_SHOW_UI);
        return true;
    default:
        // return false;
        // Update based on @Rene comment below:
        return super.onKeyDown(keyCode, event);
    }
}
8 голосов
/ 15 января 2015

Вы можете использовать следующий код для обработки тома с помощью SeekBar:

AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);

SeekBar sbVolumeBooster = (SeekBar) findViewById(R.id.sbVolumeBooster);
sbVolumeBooster.setMax(audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC)); 
sbVolumeBooster.setProgress(audioManager.getStreamVolume(AudioManager.STREAM_MUSIC));  

sbVolumeBooster.setOnSeekBarChangeListener(new OnSeekBarChangeListener() 
{
    @Override
    public void onStopTrackingTouch(SeekBar arg0) 
    {
    }

    @Override
    public void onStartTrackingTouch(SeekBar arg0) 
    {
    }

    @Override
    public void onProgressChanged(SeekBar arg0, int progress, boolean arg2) 
    {
        audioManager.setStreamVolume(AudioManager.STREAM_MUSIC,
                progress, 0);  // 0 can also be changed to AudioManager.FLAG_PLAY_SOUND
    }
});
3 голосов
/ 31 мая 2014

Давать 0 - во флагах избегать получения визуального и звукового индикатора. Это хорошо, когда вы реализуете собственную звуковую панель и индикатор и не хотите, чтобы Android что-либо добавил.

1 голос
/ 14 ноября 2010

Использование adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, flags);

http://developer.android.com/reference/android/media/AudioManager.html#adjustStreamVolume(int, int, int)

...