【问题标题】:Mute the global sound in Android在 Android 中静音全局声音
【发布时间】:2012-06-09 09:16:46
【问题描述】:

有没有一种方法可以用来使应用程序按钮的全局声音静音?

【问题讨论】:

    标签: android audio global mute


    【解决方案1】:

    他们使事情变得比它必须的更复杂。您可以使用AudioManager.setStreamMute()。随意使用下面的代码。

    //mute audio
    AudioManager amanager=(AudioManager)getSystemService(Context.AUDIO_SERVICE);
                 amanager.setStreamMute(AudioManager.STREAM_NOTIFICATION, true);
                 amanager.setStreamMute(AudioManager.STREAM_ALARM, true);
                 amanager.setStreamMute(AudioManager.STREAM_MUSIC, true);
                 amanager.setStreamMute(AudioManager.STREAM_RING, true);
                 amanager.setStreamMute(AudioManager.STREAM_SYSTEM, true);
    
    
    //unmute audio
    AudioManager amanager=(AudioManager)getSystemService(Context.AUDIO_SERVICE);
                 amanager.setStreamMute(AudioManager.STREAM_NOTIFICATION, false);
                 amanager.setStreamMute(AudioManager.STREAM_ALARM, false);
                 amanager.setStreamMute(AudioManager.STREAM_MUSIC, false);
                 amanager.setStreamMute(AudioManager.STREAM_RING, false);
                 amanager.setStreamMute(AudioManager.STREAM_SYSTEM, false);
    

    【讨论】:

    • 不幸的是,自 API 级别 22 起已弃用。
    • @Endzeit:见@Lokanath 的回答。对于最近的 Android,只需将 adjustStreamVolume() 调用替换为 ADJUST_MUTE
    【解决方案2】:

    所提供的答案似乎已被 android M (API 23) 弃用,因此这提供了一种替代解决方案

    public void MuteAudio(){
        AudioManager mAlramMAnager = (AudioManager) aActivity.getSystemService(aContext.AUDIO_SERVICE);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            mAlramMAnager.adjustStreamVolume(AudioManager.STREAM_NOTIFICATION, AudioManager.ADJUST_MUTE, 0);
            mAlramMAnager.adjustStreamVolume(AudioManager.STREAM_ALARM, AudioManager.ADJUST_MUTE, 0);
            mAlramMAnager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_MUTE, 0);
            mAlramMAnager.adjustStreamVolume(AudioManager.STREAM_RING, AudioManager.ADJUST_MUTE, 0);
            mAlramMAnager.adjustStreamVolume(AudioManager.STREAM_SYSTEM, AudioManager.ADJUST_MUTE, 0);
        } else {
            mAlramMAnager.setStreamMute(AudioManager.STREAM_NOTIFICATION, true);
            mAlramMAnager.setStreamMute(AudioManager.STREAM_ALARM, true);
            mAlramMAnager.setStreamMute(AudioManager.STREAM_MUSIC, true);
            mAlramMAnager.setStreamMute(AudioManager.STREAM_RING, true);
            mAlramMAnager.setStreamMute(AudioManager.STREAM_SYSTEM, true);
        }
    }
    
    public void UnMuteAudio(){
        AudioManager mAlramMAnager = (AudioManager) aActivity.getSystemService(aContext.AUDIO_SERVICE);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            mAlramMAnager.adjustStreamVolume(AudioManager.STREAM_NOTIFICATION, AudioManager.ADJUST_UNMUTE, 0);
            mAlramMAnager.adjustStreamVolume(AudioManager.STREAM_ALARM, AudioManager.ADJUST_UNMUTE, 0);
            mAlramMAnager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_UNMUTE,0);
            mAlramMAnager.adjustStreamVolume(AudioManager.STREAM_RING, AudioManager.ADJUST_UNMUTE, 0);
            mAlramMAnager.adjustStreamVolume(AudioManager.STREAM_SYSTEM, AudioManager.ADJUST_UNMUTE, 0);
        } else {
            mAlramMAnager.setStreamMute(AudioManager.STREAM_NOTIFICATION, false);
            mAlramMAnager.setStreamMute(AudioManager.STREAM_ALARM, false);
            mAlramMAnager.setStreamMute(AudioManager.STREAM_MUSIC, false);
            mAlramMAnager.setStreamMute(AudioManager.STREAM_RING, false);
            mAlramMAnager.setStreamMute(AudioManager.STREAM_SYSTEM, false);
        }
    }
    

    希望这会有所帮助...

    【讨论】:

    • 完美解决方案!!如果您保留单一方法静音/取消静音标志参数会更好,但这是可选的:)。
    【解决方案3】:

    Android中有四种声音设置:

    • 报警
    • 音乐
    • 铃声
    • 通知

    首先,创建AudioManager类的对象:

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

    如果要设置音量,请使用这些:

    通知

    amanager.setStreamVolume(AudioManager.STREAM_NOTIFICATION,
        AudioManager.FLAG_SHOW_UI + AudioManager.FLAG_PLAY_SOUND);
    

    报警

    amanager.setStreamVolume(AudioManager.STREAM_ALARM,
        AudioManager.FLAG_SHOW_UI + AudioManager.FLAG_PLAY_SOUND);
    

    音乐方面

    amanager.setStreamVolume(AudioManager.STREAM_MUSIC,
        AudioManager.FLAG_SHOW_UI + AudioManager.FLAG_PLAY_SOUND);
    

    用于铃声

    amanager.setStreamVolume(AudioManager.STREAM_RING,
        AudioManager.FLAG_SHOW_UI + AudioManager.FLAG_PLAY_SOUND);
    

    【讨论】:

    • 实际上没有更多的流(系统、语音呼叫)吗?我见过那些在真实设备中使用的。此外,没有方法 AudioManager#setStreamVolume(int, int),只有一个接受三个参数(一个是要设置的音量)。您可以传递 0,但并非所有流都接受。
    • 这个答案中没有给出类似的方法
    【解决方案4】:

    您可以使用 setRingerMode() 方法来做到这一点

    AudioManager audioManager=(AudioManager)getSystemService(AUDIO_SERVICE);
    audioManager.setRingerMode(audioManager.RINGER_MODE_SILENT);
    

    静音和振动 RINGER_MODE_VIBRATE 标志

    取消静音:RINGER_MODE_NORMAL

    【讨论】:

      【解决方案5】:
      mAlramMAnager.adjustStreamVolume(AudioManager.STREAM_NOTIFICATION, AudioManager.ADJUST_TOGGLE_MUTE, 0);
      mAlramMAnager.adjustStreamVolume(AudioManager.STREAM_ALARM, AudioManager.ADJUST_TOGGLE_MUTE, 0);
      mAlramMAnager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_TOGGLE_MUTE,0);
      mAlramMAnager.adjustStreamVolume(AudioManager.STREAM_RING, AudioManager.ADJUST_TOGGLE_MUTE, 0);
      mAlramMAnager.adjustStreamVolume(AudioManager.STREAM_SYSTEM, AudioManager.ADJUST_TOGGLE_MUTE, 0);
      

      【讨论】:

        【解决方案6】:

        从技术上讲,不存在全局卷之类的东西。 Bhargav 的回答应该让你走上正轨。 AudioManager 类可以控制许多不同的“流”,即 Music、Ringer、In-Call、Alarm、Notification、System 和 DMTF。您必须将所有这些单独的流的音量设置为 0,如图所示,这是一个非常简单的过程。

        只需创建一个 Audiomanager 对象:-

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

        然后用它来改变所有流的音量:-

        audioManager.setStreamVolume(AudioManager.Stream, Extra Flags or null);
        

        不要输入 AudioManager.Stream,而是输入“AudioManager”。并按 Ctrl+空格键查看您可以使用的所有不同流。查看文档以了解可以添加声音或振动或在音量更改时调出音量 UI 的多种不同类型的标志。

        每个流可能有不同的最大音量,因此请务必使用 getMaxStreamVolume 获取最大值并相应地设置音量,以防您使用单个值来编辑所有流。所以如果用户想要将全局音量设置为50%,则获取每个流的最大音量,将它们乘以0.5,然后将其设置为对应的流。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-01-06
          • 1970-01-01
          • 2011-01-21
          • 2016-09-10
          • 2018-09-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多