Как отключить звук в динамике Android

Может кто-нибудь сказать мне, как отключить звук динамика в Android. Я старался

mAudioManager.setStreamSolo(AudioManager.STREAM_VOICE_CALL, true);

а также

mAudioManager.setStreamMute(AudioManager.STREAM_MUSIC,true);

Но это не работает.

3 ответа

Решение

По сути, вам нужно знать, какой поток вы планируете угонять, из того, что я слышал AudioManager глючит Если ваша идея состоит в том, чтобы закрыть все существующие потоки и воспроизводить только ваш звук, вы можете обмануть другие приложения, создающие шум, выполнив это:

AudioManager.setMode(AudioManager.MODE_IN_CALL);
AudioManager.setStreamSolo(AudioManager.STREAM_VOICE_CALL, true);

затем удалите его позже

AudioManager.setStreamSolo(AudioManager.STREAM_VOICE_CALL, false);
AudioManager.setMode(AudioManager.MODE_NORMAL );

ИЛИ, вы можете отключить звук, изменив громкость:

AudioManager audioManager = 
    (AudioManager) getSystemService(Context.AUDIO_SERVICE);
audioManager.adjustVolume(AudioManager.ADJUST_LOWER,
    AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);

в этом:

      var originalVolume = 0
private val audioManager: AudioManager by lazy {
    if(Build.VERSION.SDK_INT > Build.VERSION_CODES.M) {
        return@lazy Util.appContext().getSystemService(AudioManager::class.java)
    } else {
        return@lazy Util.appContext().getSystemService(Context.AUDIO_SERVICE) as AudioManager
    }

}

где нужно отключить звук:

      if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
   audioManager.adjustVolume(AudioManager.ADJUST_MUTE, AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
} else {
   originalVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
   audioManager.mode = AudioManager.MODE_IN_CALL
   audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 0, 0)
}

где нужно включить звук:

      if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
      audioManager.adjustVolume(AudioManager.ADJUST_UNMUTE, AudioManager.FLAG_PLAY_SOUND);
} else {
      audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, originalVolume, 0)
      audioManager.mode = AudioManager.MODE_NORMAL
}

Из леденцов setStreamSolo был объявлен устаревшим Между ними был другой метод, но теперь на Oreo правильный способ сделать это:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    am.requestAudioFocus(new AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE)
              .setAudioAttributes(new AudioAttributes.Builder().setUsage(USAGE_VOICE_COMMUNICATION).build()).build());
    am.adjustVolume(AudioManager.ADJUST_MUTE, AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);  
}
Другие вопросы по тегам