android实现背景音乐播放功能
参考了一下网上别人写的,再使用的时候是放在新开的线程中来播放音乐的,后来发现每次进入Activity后就会重复开始一个音乐播放的声音。为了避免重复开启播放功能我在原来代码的基础上增加了单例模式。这样就避免了出现重复播放。
packagecom.liu.zhen.utils; importandroid.content.Context; importandroid.content.res.AssetFileDescriptor; importandroid.media.MediaPlayer; importandroid.util.Log; /** * *Thisclassisusedforcontrollingbackgroundmusic * */ publicclassBackgroundMusic{ privatestaticBackgroundMusicbackgroundMusic=null; privatestaticfinalStringTAG="Bg_Music"; privatefloatmLeftVolume; privatefloatmRightVolume; privateContextmContext; privateMediaPlayermBackgroundMediaPlayer; privatebooleanmIsPaused; privateStringmCurrentPath; privateBackgroundMusic(Contextcontext){ this.mContext=context; initData(); } publicstaticBackgroundMusicgetInstance(Contextcontext){ if(backgroundMusic==null){ backgroundMusic=newBackgroundMusic(context); } returnbackgroundMusic; } //初始化一些数据 privatevoidinitData(){ mLeftVolume=0.5f; mRightVolume=0.5f; mBackgroundMediaPlayer=null; mIsPaused=false; mCurrentPath=null; } /** *根据path路径播放背景音乐 * *@parampath *:assets中的音频路径 *@paramisLoop *:是否循环播放 */ publicvoidplayBackgroundMusic(Stringpath,booleanisLoop){ if(mCurrentPath==null){ //这是第一次播放背景音乐---itisthefirsttimetoplaybackgroundmusic //或者是执行end()方法后,重新被叫---orend()wascalled mBackgroundMediaPlayer=createMediaplayerFromAssets(path); mCurrentPath=path; }else{ if(!mCurrentPath.equals(path)){ //播放一个新的背景音乐---playnewbackgroundmusic //释放旧的资源并生成一个新的----releaseoldresourceandcreateanewone if(mBackgroundMediaPlayer!=null){ mBackgroundMediaPlayer.release(); } mBackgroundMediaPlayer=createMediaplayerFromAssets(path); //记录这个路径---recordthepath mCurrentPath=path; } } if(mBackgroundMediaPlayer==null){ Log.e(TAG,"playBackgroundMusic:backgroundmediaplayerisnull"); }else{ //若果音乐正在播放或已近中断,停止它---ifthemusicisplayingorpaused,stopit mBackgroundMediaPlayer.stop(); mBackgroundMediaPlayer.setLooping(isLoop); try{ mBackgroundMediaPlayer.prepare(); mBackgroundMediaPlayer.seekTo(0); mBackgroundMediaPlayer.start(); this.mIsPaused=false; }catch(Exceptione){ Log.e(TAG,"playBackgroundMusic:errorstate"); } } } /** *停止播放背景音乐 */ publicvoidstopBackgroundMusic(){ if(mBackgroundMediaPlayer!=null){ mBackgroundMediaPlayer.stop(); //shouldsetthestate,ifnot,thefollowingsequencewillbe //error //play->pause->stop->resume this.mIsPaused=false; } } /** *暂停播放背景音乐 */ publicvoidpauseBackgroundMusic(){ if(mBackgroundMediaPlayer!=null &&mBackgroundMediaPlayer.isPlaying()){ mBackgroundMediaPlayer.pause(); this.mIsPaused=true; } } /** *继续播放背景音乐 */ publicvoidresumeBackgroundMusic(){ if(mBackgroundMediaPlayer!=null&&this.mIsPaused){ mBackgroundMediaPlayer.start(); this.mIsPaused=false; } } /** *重新播放背景音乐 */ publicvoidrewindBackgroundMusic(){ if(mBackgroundMediaPlayer!=null){ mBackgroundMediaPlayer.stop(); try{ mBackgroundMediaPlayer.prepare(); mBackgroundMediaPlayer.seekTo(0); mBackgroundMediaPlayer.start(); this.mIsPaused=false; }catch(Exceptione){ Log.e(TAG,"rewindBackgroundMusic:errorstate"); } } } /** *判断背景音乐是否正在播放 * *@return:返回的boolean值代表是否正在播放 */ publicbooleanisBackgroundMusicPlaying(){ booleanret=false; if(mBackgroundMediaPlayer==null){ ret=false; }else{ ret=mBackgroundMediaPlayer.isPlaying(); } returnret; } /** *结束背景音乐,并释放资源 */ publicvoidend(){ if(mBackgroundMediaPlayer!=null){ mBackgroundMediaPlayer.release(); } //重新“初始化数据” initData(); } /** *得到背景音乐的“音量” * *@return */ publicfloatgetBackgroundVolume(){ if(this.mBackgroundMediaPlayer!=null){ return(this.mLeftVolume+this.mRightVolume)/2; }else{ return0.0f; } } /** *设置背景音乐的音量 * *@paramvolume *:设置播放的音量,float类型 */ publicvoidsetBackgroundVolume(floatvolume){ this.mLeftVolume=this.mRightVolume=volume; if(this.mBackgroundMediaPlayer!=null){ this.mBackgroundMediaPlayer.setVolume(this.mLeftVolume, this.mRightVolume); } } /** *createmediaplayerformusic * *@parampath *thepathrelativetoassets *@return */ privateMediaPlayercreateMediaplayerFromAssets(Stringpath){ MediaPlayermediaPlayer=null; try{ AssetFileDescriptorassetFileDescritor=mContext.getAssets() .openFd(path); mediaPlayer=newMediaPlayer(); mediaPlayer.setDataSource(assetFileDescritor.getFileDescriptor(), assetFileDescritor.getStartOffset(), assetFileDescritor.getLength()); mediaPlayer.prepare(); mediaPlayer.setVolume(mLeftVolume,mRightVolume); }catch(Exceptione){ mediaPlayer=null; Log.e(TAG,"error:"+e.getMessage(),e); } returnmediaPlayer; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。