Как получить / установить громкость мультимедиа (не громкость мелодии звонка) в Android?

Есть ли способ получить / установить громкость мультимедиа? Я пробовал следующее:

AudioManager audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
int currentVolume = audio.getStreamVolume(AudioManager.STREAM_RING);

но возвращает громкость мелодии звонка.


person Buda Gavril    schedule 04.01.2011    source источник
comment
Ответ, который я предоставил, также вызывает диалоговое окно громкости, которое отображается при использовании аппаратного регулятора громкости.   -  person trgraglia    schedule 06.07.2012


Ответы (8)


Вместо AudioManager.STREAM_RING вы должны использовать AudioManager.STREAM_MUSIC. Этот вопрос уже обсуждался здесь.

person Sandy    schedule 04.01.2011
comment
Здесь также можно найти быстрый пример: stackoverflow.com/a/5446346/491044 - person trgraglia; 18.08.2014
comment
Можете ли вы мне помочь с вопросом об объеме? stackoverflow.com/questions/35256364/volume-always-the-same < / а> - person Ruchir Baronia; 07.02.2016

private AudioManager audio;

Внутри onCreate:

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;
    }
}
person trgraglia    schedule 27.03.2011
comment
Вы сделали мой день, решение сработало очень хорошо, именно то, что мне нужно. Чтобы все знали, это показывает всплывающее окно с индикатором громкости мультимедиа и позволяет легко выбирать громкость в вашем приложении. Спасибо. - person Alin; 27.03.2011
comment
Нет проблем ... Вы, конечно, также можете обрабатывать другие вещи с помощью оператора switch, например, нажатия клавиш меню и кнопки возврата. - person trgraglia; 28.03.2011
comment
Это слишком сложно. И издает нежелательный звук, например, громкость мелодии звонка, измененная пользователем. Лучшие решения: stackoverflow.com/a/10919403/148387 - person Vadim; 08.06.2012
comment
Как раз то, что мне было нужно. Спасибо @trgraglia! - person miek; 19.06.2012
comment
В документации прямо сказано не делать этого: developer.android.com/training / manage-audio / У вас может возникнуть соблазн попробовать и прислушаться к нажатию клавиш регулировки громкости и таким образом изменить громкость аудиопотока. Сопротивляйтесь побуждению. - person Wayne Uroda; 10.10.2013
comment
В нем также указано: Тип аудиопотока, громкость которого следует изменить с помощью аппаратных регуляторов громкости. Не гарантируется, что аппаратные регуляторы громкости всегда будут изменять громкость этого потока (например, если вызов выполняется, вместо этого может быть изменена громкость его потока). Чтобы вернуться к значениям по умолчанию, используйте USE_DEFAULT_STREAM_TYPE. Документация по швам изменила фокус, но также неплохо иметь конечное решение, которое оставляет меньше ошибок: developer.android.com/reference/android/app/. Хотя это полезно знать. - person trgraglia; 10.10.2013
comment
Вы не должны просто возвращать false по умолчанию, так как это эффективно отключит другие кнопки, такие как кнопка возврата. Вместо этого super.onKeyDown(keyCode, event); - person Torsten Römer; 06.08.2015
comment
Можете ли вы мне помочь с вопросом об объеме? stackoverflow.com/questions/35256364/volume-always-the-same < / а> - person Ruchir Baronia; 07.02.2016

Попробуйте это:

setVolumeControlStream(AudioManager.STREAM_MUSIC);

person hanoo    schedule 25.03.2012
comment
Цитата: у вас может возникнуть соблазн попробовать и прислушаться к нажатию клавиш регулировки громкости и таким образом изменить громкость аудиопотока. Сопротивляйтесь побуждению. Android предоставляет удобный метод setVolumeControlStream () для направления нажатий клавиш громкости на указанный вами аудиопоток. developer.android.com/training/managing-audio/ - person EricRobertBrewer; 02.06.2013
comment
Это намного лучше, чем пытаться управлять громкостью самостоятельно. - person strangeluck; 05.09.2013
comment
Это определенно должно быть ответом. Он также работает с действиями, которые наследуют NativeActivity. - person Brent; 29.04.2014

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

this.setVolumeControlStream(AudioManager.STREAM_MUSIC);
this.setVolumeControlStream(AudioManager.STREAM_RING);  
this.setVolumeControlStream(AudioManager.STREAM_ALARM);  
this.setVolumeControlStream(AudioManager.STREAM_NOTIFICATION);  
this.setVolumeControlStream(AudioManager.STREAM_SYSTEM);  
this.setVolumeControlStream(AudioManager.STREAM_VOICECALL); 
person Asaf Pinhassi    schedule 06.06.2012
comment
@hanoo также написал об этом в своем ответе несколько месяцев назад. - person trgraglia; 14.06.2012
comment
Можете ли вы мне помочь с вопросом об объеме? stackoverflow.com/questions/35256364/volume-always-the-same < / а> - person Ruchir Baronia; 07.02.2016
comment
есть идеи, как найти текущий поток регулировки громкости? из службы, например? - person Vlad; 29.02.2016

Если у вас есть полоса громкости, которую вы хотите отрегулировать - аналогично тому, что вы видите в приложении для iPod на iPhone - вот как.

    @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {

    switch (keyCode) {
    case KeyEvent.KEYCODE_VOLUME_UP:
        audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);
        //Raise the Volume Bar on the Screen
        volumeControl.setProgress( audioManager.getStreamVolume(AudioManager.STREAM_MUSIC)
                + AudioManager.ADJUST_RAISE);
        return true;
    case KeyEvent.KEYCODE_VOLUME_DOWN:
        //Adjust the Volume
        audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_LOWER, AudioManager.FLAG_SHOW_UI);
        //Lower the VOlume Bar on the Screen
        volumeControl.setProgress(audioManager
                .getStreamVolume(AudioManager.STREAM_MUSIC)
                + AudioManager.ADJUST_LOWER);
        return true;
    default:
        return false;
    }
person Chris M    schedule 01.10.2011

Следующий код установит максимальную громкость медиапотока:

AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC,
    audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC),
    AudioManager.FLAG_SHOW_UI);
person sskates    schedule 06.09.2011

Чтобы установить громкость на 0

AudioManager audioManager;
audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 0, 0);

Чтобы установить полную громкость

AudioManager audioManager;
audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 20, 0);

громкость можно регулировать, изменяя значение индекса от 0 до 20

person Eby Cloudins    schedule 28.06.2017
comment
Максимальная громкость не всегда 20. Возможно, вы можете передать значение больше максимального, не вызывая проблем, я не знаю. Но для получения максимума используйте audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC). - person Mudlabs; 02.09.2019

person    schedule
comment
getStreamMaxVolume был полезен для установки громкости. - person Behrouz.M; 17.12.2016