Хорошо, принятый ответ не работает для меня.На Galaxy Nexus под управлением 4.2.1 (Jelly Bean) при записи через MediaRecorder мне нужно было использовать AudioManager.STREAM_RING
, потому что AudiManager.STREAM_SYSTEM
не работал.Он всегда будет воспроизводить звук «колокольчика» в начале каждой записи.
Вот мое решение с использованием "STREAM_RING" и других.
// disable sound when recording.
((AudioManager)activity.getApplicationContext().getSystemService(Context.AUDIO_SERVICE)).setStreamMute(AudioManager.STREAM_ALARM,true);
((AudioManager)activity.getApplicationContext().getSystemService(Context.AUDIO_SERVICE)).setStreamMute(AudioManager.STREAM_DTMF,true);
((AudioManager)activity.getApplicationContext().getSystemService(Context.AUDIO_SERVICE)).setStreamMute(AudioManager.STREAM_MUSIC,true);
((AudioManager)activity.getApplicationContext().getSystemService(Context.AUDIO_SERVICE)).setStreamMute(AudioManager.STREAM_RING,true);
((AudioManager)activity.getApplicationContext().getSystemService(Context.AUDIO_SERVICE)).setStreamMute(AudioManager.STREAM_SYSTEM,true);
((AudioManager)activity.getApplicationContext().getSystemService(Context.AUDIO_SERVICE)).setStreamMute(AudioManager.STREAM_VOICE_CALL,true);
// re-enable sound after recording.
((AudioManager)activity.getApplicationContext().getSystemService(Context.AUDIO_SERVICE)).setStreamMute(AudioManager.STREAM_ALARM,false);
((AudioManager)activity.getApplicationContext().getSystemService(Context.AUDIO_SERVICE)).setStreamMute(AudioManager.STREAM_DTMF,false);
((AudioManager)activity.getApplicationContext().getSystemService(Context.AUDIO_SERVICE)).setStreamMute(AudioManager.STREAM_MUSIC,false);
((AudioManager)activity.getApplicationContext().getSystemService(Context.AUDIO_SERVICE)).setStreamMute(AudioManager.STREAM_RING,false);
((AudioManager)activity.getApplicationContext().getSystemService(Context.AUDIO_SERVICE)).setStreamMute(AudioManager.STREAM_SYSTEM,false);
((AudioManager)activity.getApplicationContext().getSystemService(Context.AUDIO_SERVICE)).setStreamMute(AudioManager.STREAM_VOICE_CALL,false);
Также в качестве документации состояния обязательно повторно включите звук в методе onPause()
.
Надеюсь, это поможет кому-то вырвать волосы из-за этой проблемы.Это отключает все звуковые потоки.Вы можете пройти и выяснить, какие именно вам нужны.Я обнаружил, что разные версии Android используют разные потоки для звонка при запуске медиа-рекордер.то есть STREAM_RING работает для Android 4.2.1, но для ICS не работает.
Редактировать: Как упоминается в моем комментарии ниже, я не могу отключить звук для Android OS 2.3.3 на Samsung GalaxyS1.Кому-нибудь повезло с этим?
Решение Darrenp помогает привести в порядок код, но в недавнем обновлении моего телефона (galaxy nexus android 4.3) снова прозвучал сигнал громкости / записи!Решение пользователя user1944526 определенно помогает.Чтобы облегчить понимание ...
Используйте что-то вроде
// class variables.
Integer oldStreamVolume;
AudioManager audioMgr;
enableSound() {
setMuteAll(false);
if (audioMgr != null && oldStreamVolume != null) {
audioMgr.setStreamVolume(AudioManager.STREAM_RING, oldStreamVolume, 0);
}
}
disableSound() {
audioMgr = (AudioManager)activity.getApplicationContext().getSystemService(Context.AUDIO_SERVICE);
oldStreamVolume = audioMgr.getStreamVolume(AudioManager.STREAM_RING);
audioMgr.setStreamVolume(AudioManager.STREAM_RING, 0, 0);
}
Для полноты каждой из этих функций вы также можете вызвать решение Дарренпа в функции или включить всеиз вышеуказанных STREAM_
строк.но для меня сейчас эти вместе работают.Надеюсь, это кому-нибудь поможет ...