如何在android中静音MediaPlayer
Posted
技术标签:
【中文标题】如何在android中静音MediaPlayer【英文标题】:How to mute MediaPlayer in android 【发布时间】:2011-06-02 04:48:30 【问题描述】:如何在 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();
【讨论】:
以上是关于如何在android中静音MediaPlayer的主要内容,如果未能解决你的问题,请参考以下文章