【问题标题】:How to mute MediaPlayer in android如何在android中静音MediaPlayer
【发布时间】:2011-06-02 04:48:30
【问题描述】:

如何在 android 中静音 MediaPlayer

【问题讨论】:

    标签: android android-mediaplayer


    【解决方案1】:

    这段代码对我有用,

    MediaPlayer mp = MediaPlayer.create(context, R.raw.sound_file_1);
    mp.start();
    

    对于静音

    mp.setVolume(0,0);
    

    & 取消静音全音量

    mp.setVolume(1,1);
    

    【讨论】:

    • 两位数分别代表左右声道,所以取消静音的应该是mp.setvolume(1,1);
    • 我知道这是很久以后的事了,但是当我尝试设置音量时出现空指针异常。非常感谢您的帮助。
    • 你应该先初始化,同时设置音量应该交叉检查不为空
    • 这只会使一个音频文件静音。如果我有多个音频文件并且我想在任何活动中全局打开/关闭声音怎么办?
    • 对于多个音频文件,您正在使用多个媒体播放器实例,因此您必须将所有实例静音。
    【解决方案2】:
     AudioManager   mAudioManager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);
    
        int current_volume =mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
        //If you want to player is mute ,then set_volume variable is zero.Otherwise you may supply some value.
        int set_volume=0;
        mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC,set_volume, 0);
    

    【讨论】:

      【解决方案3】:

      您可能想要淡出/淡入声音,而不是立即将其设置为全 (1.0f) 或零 (0.0f) 音量。

      这有点棘手,因为您需要一个异步任务来保持您的应用响应:

      mpMain 是我的 MediaPlayer 实例,用于播放循环背景音乐。 我也在 OnPause() 和 OnResume() 中关心它。

      方法playBackgroundMusic用于打开音乐,fadeOutBackgroundMusic关闭音乐,但通过淡出音量0.5秒(10*50,见while和Thread.sleep)。

      我的 base-volume 是 0.8f,您可能希望将其作为异步任务的参数或使用静态全局变量。

      public void playBackgroundMusic( Boolean isOn ){
        if(isOn){
          // prevent conflics with async fade-out task
          if(mtask_fadeout_music!=null){
            mtask_fadeout_music.cancel(true);
            mtask_fadeout_music=null;
          }
          if(mpMain==null){
            mpMain = MediaPlayer.create(this, R.raw.zin___piano_2_140bpm_32158);
            mpMain.setLooping(true);
            mpMain.setVolume(0.8f,0.8f);
            mpMain.start();                         
          }
        }
        else{
          if(mtask_fadeout_music==null){
            fadeOutBackgroundMusic();
          }
        }
      }
      
      public void fadeOutBackgroundMusic(){
        mtask_fadeout_music = (FadeOutMusic)new FadeOutMusic( ).execute( );
      }
      
      
      //
      //  background processing ... fade out music stream
      //
      public class FadeOutMusic extends AsyncTask<String,Integer,String> {
      
        @Override
        protected String doInBackground(String... args) {
          float level = 0.8f;
          int i = 1;
      
          while(i<50){
              i++;
              if(mpMain != null){
                level=level*0.9f;
                mpMain.setVolume(level, level);         
              }
              try {
                Thread.sleep(10);
              } catch (InterruptedException e) {
                e.printStackTrace();
              }
          }
          return "dummy";
        }
      
        @Override
        protected void onPostExecute( String dummy ) {
          if(mpMain != null){
            mpMain.setVolume(0,0);         
            mpMain.release();
            mpMain = null;  
          }
          if(mtask_fadeout_music!=null){
            mtask_fadeout_music = null;
          }
        }       
      
        @Override
        public void onCancelled() {
          if(mpMain != null){
            mpMain.setVolume(0,0);         
            mpMain.release();
            mpMain = null;  
          }
          if(mtask_fadeout_music!=null){
            mtask_fadeout_music = null;
          }
        }
      }
      

      【讨论】:

        【解决方案4】:

        AudioManger.setStreamMute 已弃用。 使用下面的替代代码。

        AudioManager am = getSystemService(Context.AUDIO_SERVICE);
        // Change the stream to your stream of choice. 
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
               am.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_MUTE, 0);
            } else {
               am.setStreamMute(AudioManager.STREAM_MUSIC, true);
            }
        

        【讨论】:

          【解决方案5】:

          我们可以使用以下方法来静音/取消静音或检查音频播放器是否处于静音状态

          /**
           * To Mute or Un-mute using Audio Manager
           */
          private fun updateMuteState(mute: Boolean) {
              activity?.let {
                  getAudioManager(it).adjustStreamVolume(
                      AudioManager.STREAM_MUSIC,
                      if (mute) -100 else 100,
                      0
                  )
              }
          }
          
          /**
           * Return true -> audio player is in mute state, false otherwise
           */
          private fun isMute(): Boolean {
              activity?.let {
                  getAudioManager(it).getStreamVolume(AudioManager.STREAM_MUSIC).let { volume ->
                      return volume == 0
                  }
              }
              return false
          }
          
          /**
           * To Get the Audio Manager
           */
          private fun getAudioManager(context: Context) =
              context.getSystemService(Context.AUDIO_SERVICE) as AudioManager
          

          【讨论】:

            【解决方案6】:

            试试这个...

               AudioManager manager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
            manager.setStreamMute(AudioManager.STREAM_MUSIC, true);
            

            它将静音整个媒体音量静音

            【讨论】:

              【解决方案7】:

              试试这个

              AudioManager am = getSystemService(Context.AUDIO_SERVICE);
              // Request audio focus.
              am.requestAudioFocus(listener, AudioManager.STREAM_MUSIC,AudioManager.AUDIOFOCUS_GAIN);
              

              http://developer.android.com/training/managing-audio/audio-focus.html

              【讨论】:

                【解决方案8】:

                即使在静音模式下,我也可以取消静音

                 MediaPlayer mMediaPlayer = new MediaPlayer();
                 mMediaPlayer.setDataSource(this, alarmUri);
                 mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
                 mMediaPlayer.setVolume(0.7f,0.7f);
                 mMediaPlayer.prepare();
                 mMediaPlayer.start();
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-07-24
                  • 2013-03-04
                  • 1970-01-01
                  相关资源
                  最近更新 更多