【问题标题】:How to mute audio speaker in android如何在android中静音音频扬声器
【发布时间】:2021-05-25 18:08:25
【问题描述】:

谁能告诉我如何在 android 中将音频扬声器静音。 我试过了

mAudioManager.setStreamSolo(AudioManager.STREAM_VOICE_CALL, true);

mAudioManager.setStreamMute(AudioManager.STREAM_MUSIC,true);

但它不起作用。

【问题讨论】:

    标签: android


    【解决方案1】:

    基本上你需要知道你计划劫持哪个流,据我听说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);
    

    【讨论】:

    • 在相机中劫持快门声怎么样?谢谢。
    【解决方案2】:

    来自 Lollipop 的 setStreamSolo 已弃用。中间还有另一种方法,但现在在奥利奥上,正确的做法似乎是:

    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);  
    }
    

    【讨论】:

      【解决方案3】:

      初始化:

      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
      }
      

      【讨论】:

        猜你喜欢
        • 2014-04-06
        • 2018-09-23
        • 2012-08-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多