MediaPlayer生命周期:

232055896.gif

注:1.prepare会造成阻塞 要先缓存一段后才会播放

   2.调用stop()方法后,在调用star()会出现状态错误。可用以下方法替代解决:

    // 停止播放
    private void stop()
    {
//        mPlayer.stop();
                          
        // 用下面的方法替代stop方法
        mPlayer.pause();
        mPlayer.seekTo(0);
                          
        sendPlayBroadcast();
    }




范例:

public class MediaPlayerServeice extends Service
{
    private MediaPlayer mPlayer;
    private SongJson songJson;
                                                                              
    private ArrayList<SongJson> mPlayList = new ArrayList<SongJson>();//播放列表
    private ArrayList<SongJson> mRadomPlayList = new ArrayList<SongJson>();//随机播放列表
    private int mPlayMode;//播放模式
    private SongJson mPlayingSong;//当前播放歌曲
    private int mSongPosition;//当前播放歌曲在列表中的位置
                                                                              
    public MediaPlayerServeice()
    {
    }
                                                                              
    @Override
    public void onCreate()
    {
        super.onCreate();
        mPlayingSong = new SongJson();
                                                                                  
        mPlayer = new MediaPlayer();
        mBinder = new PlayBinder();
                                                                                  
        //出现状态错误时,此方法规避fc
        mPlayer.setOnErrorListener(new OnErrorListener()
        {
            @Override
            public boolean onError(MediaPlayer mp, int what, int extra)
            {
                mPlayer.reset();
                return false;
            }
        });
                                                                                  
        //监听音乐是否播放完毕
        mPlayer.setOnCompletionListener(new OnCompletionListener()
        {
            @Override
            public void onCompletion(MediaPlayer mp)
            {
                playNext();
            }
        });
    }
                                                                              
                                                                              
                                                                              
    private IBinder mBinder;
    @Override
    public IBinder onBind(Intent intent)
    {
        return mBinder;
    }
    //快进快退
    private void seekTo(int msec)
    {
//        mPlayer.getDuration();//得到歌曲总时间
        mPlayer.seekTo(msec);
    }
                                                                              
    //得到当前播放位置
    public int getCurrentPosition()
    {
        return mPlayer.getCurrentPosition();
    }
                                                                              
    //播放下一首
    private void playNext()
    {
                                                                                  
    }
                                                                              
    //停止播放
    private void stop()
    {
        mPlayer.stop();
    }
    //得到播放循环模式
    private int setPlayMode(int mode)
    {
        return mPlayMode = mode;
    }
                                                                              
    //添加歌曲至播放列表
    private void setPlayList(ArrayList<SongJson> list)
    {
                                                                                  
    }
                                                                              
    // 得到当前播放进度
    private int getCurrTime()
    {
        return mPlayer.getCurrentPosition();
    }
                                                                              
    //继续播放
    private void continuePlay()
    {
        mPlayer.start();
    }
                                                                              
    //是否正在播放
    private boolean isplaying()
    {
        return mPlayer.isPlaying();
    }
                                                                              
    //暂停
    private void pause()
    {
        mPlayer.pause();
    }
                                                                              
    // 播放音乐
    private void play(final String url)
    {
        mPlayer.reset();
        try
        {
            mPlayer.setDataSource(url);
            mPlayer.setOnPreparedListener(new OnPreparedListener()
            {
                @Override
                public void onPrepared(MediaPlayer mp)
                {
                    mPlayer.start();
                }
            });
            mPlayer.prepareAsync();
                                                                                      
        }
        catch (IllegalArgumentException e)
        {
            e.printStackTrace();
        }
        catch (SecurityException e)
        {
            e.printStackTrace();
        }
        catch (IllegalStateException e)
        {
            e.printStackTrace();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
                                                                              
                                                                              
    // 自定义Binder
    public class PlayBinder extends Binder
    {
        public void play(String url)
        {
            MediaPlayerServeice.this.play(url);
        }
                                                                                  
        public boolean isplaying()
        {
            return MediaPlayerServeice.this.isplaying();
        }
                                                                                  
        public void pause()
        {
            MediaPlayerServeice.this.pause();
        }
                                                                                  
        public void continuePlay()
        {
            MediaPlayerServeice.this.continuePlay();
        }
                                                                                  
        public int getCurrTime()
        {
            return MediaPlayerServeice.this.getCurrTime();
        }
                                                                                  
        public void setPlayList(ArrayList<SongJson> list)
        {
            MediaPlayerServeice.this.setPlayList(list);
        }
                                                                                  
        public int setPlayMode(int mode)
        {
                                                                                      
            return  MediaPlayerServeice.this.setPlayMode(mode);
        }
                                                                                  
        public void playNext()
        {
                                                                                      
            MediaPlayerServeice.this.playNext();
        }
                                                                                  
        public void stop()
        {
                                                                                      
            MediaPlayerServeice.this.stop();
        }
        public int getCurrentPosition()
        {
            return MediaPlayerServeice.this.getCurrentPosition();
        }
    }
}








参考资料:

1.Android媒体的一些使用总结

http://blog.csdn.net/chengfuyong001/article/details/8617395

http://blog.csdn.net/xingtian713/article/details/6525411