如题,MediaPlayer的start(),pause(),stop()方法还有和换歌的方法一起怎么实现,要求是读取sdCard中的音乐文件。

解决方案 »

  1.   


    public void play(String path,boolean isRun){
    if(!isRun){
    mMediaPlayer.reset();// 重置
    try {
    mMediaPlayer.setDataSource(path);
    mMediaPlayer.prepare();
    } catch (IllegalArgumentException e) {
    e.printStackTrace();
    } catch (IllegalStateException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }

    }else{
    mMediaPlayer.start();
    }
    }
    这个方法的参数path 就是你的sd卡的音乐文件路径private void initMediaPlayer(){
    if(null == mMediaPlayer){
    mMediaPlayer = new MediaPlayer();

    MediaPlayer.OnPreparedListener prepareListener = new MediaPlayer.OnPreparedListener(){   
        public void onPrepared(MediaPlayer mp){   
         if(playPosition>0){
         mp.seekTo(playPosition);
         playPosition = 0;
         }
    mp.start(); //开始播放 
    mActiv.onPrepare();
    }

    };

    //播放完成
    MediaPlayer.OnCompletionListener CompletionListener=new MediaPlayer.OnCompletionListener(){
    @Override
    public void onCompletion(MediaPlayer arg0) {

    mMediaPlayer.stop();
    mActiv.onComplete();
    }
    }; MediaPlayer.OnErrorListener ErrorListener=new MediaPlayer.OnErrorListener(){
    @Override
    public boolean onError(MediaPlayer mp, int what, int extra) {
    mMediaPlayer.stop();
    // Toast.makeText(MusicActivity.this, MusicActivity.this.getText(R.string.playerError).toString()+what,Toast.LENGTH_SHORT).show();
    return true;
    }
    };



    mMediaPlayer.setOnPreparedListener(prepareListener);
    mMediaPlayer.setOnCompletionListener(CompletionListener);
    mMediaPlayer.setOnErrorListener(ErrorListener);
    }
    给你的mediaplayer绑定监听器 如上;
    public boolean pause(){
    boolean ret = mMediaPlayer.isPlaying();
    if(ret){
    mMediaPlayer.pause();
    }
    return ret ;
    }

    public void start(){
    if(null != mMediaPlayer){
    mMediaPlayer.start();
    }
    }
            public boolean stop(){

    boolean ret = mMediaPlayer.isPlaying();
    if(ret){
    mMediaPlayer.stop();
    }
    return ret ;
    }
    大体就是这样吧 提醒你以下 程序activity关闭时记得MediaPalyer.release()方法调用
    还有就是最好用service来进行 音乐的播放我把我的service给你:public class PlayService extends Service implements IPlayService{ private ServiceBinder binder = new ServiceBinder();

    private Handler serviceHandler ;

    private MediaPlayer mMediaPlayer;

    private MediaReadActivity mActiv ;

    private boolean isAppStart ;

    private int playPosition = 0;
    SoundPool soundpool ;
    private int soundId ;

    public boolean isAppStart() {
    return isAppStart;
    }
    public void setAppStart(boolean isAppStart) {
    this.isAppStart = isAppStart;
    }
    @Override
    public IBinder onBind(Intent intent) {
    return binder;
    }
    public class ServiceBinder extends Binder implements IPlayService{

    public PlayService getService(){
    return PlayService.this;
    }
    }
    @Override
    public void onCreate() {
    super.onCreate();
    initMediaPlayer();
    initSoundPool();
    }
    @Override
    public void onDestroy() {
    releaseMeidaPlayer();
    soundpool.release();
    super.onDestroy();
    }
    @Override
    public void onStart(Intent intent, int startId) {
    super.onStart(intent, startId);
    }
    @Override
    public boolean onUnbind(Intent intent) {
    return super.onUnbind(intent);
    }
    public Handler getServiceHandler() {
    return serviceHandler;
    }
    public void setServiceHandler(Handler serviceHandler) {
    this.serviceHandler = serviceHandler;
    }



    public MediaReadActivity getActiv() {
    return mActiv;
    }
    public void setActiv(MediaReadActivity mActiv) {
    this.mActiv = mActiv;
    } public int getPlayPosition() {
    return playPosition;
    }
    public void setPlayPosition(int playPosition) {
    this.playPosition = playPosition;
    }
    private void initSoundPool(){
    soundpool = new SoundPool(3, AudioManager.STREAM_MUSIC, 100);
    // soundId =soundpool.load(this, R.raw.app_start_music, 1);
    soundpool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener(){ @Override
    public void onLoadComplete(SoundPool soundPool, int sampleId,
    int status) {
    soundpool.play(sampleId, (float)0.5,(float)0.5, 0, 0, 1);
    }

    });
    }

    private void initMediaPlayer(){
    if(null == mMediaPlayer){
    mMediaPlayer = new MediaPlayer();

    MediaPlayer.OnPreparedListener prepareListener = new MediaPlayer.OnPreparedListener(){   
        public void onPrepared(MediaPlayer mp){   
         if(playPosition>0){
         mp.seekTo(playPosition);
         playPosition = 0;
         }
    mp.start(); //开始播放 
    mActiv.onPrepare();
    }

    };

    //播放完成
    MediaPlayer.OnCompletionListener CompletionListener=new MediaPlayer.OnCompletionListener(){
    @Override
    public void onCompletion(MediaPlayer arg0) {

    mMediaPlayer.stop();
    mActiv.onComplete();
    }
    }; MediaPlayer.OnErrorListener ErrorListener=new MediaPlayer.OnErrorListener(){
    @Override
    public boolean onError(MediaPlayer mp, int what, int extra) {
    mMediaPlayer.stop();
    // Toast.makeText(MusicActivity.this, MusicActivity.this.getText(R.string.playerError).toString()+what,Toast.LENGTH_SHORT).show();
    return true;
    }
    };



    mMediaPlayer.setOnPreparedListener(prepareListener);
    mMediaPlayer.setOnCompletionListener(CompletionListener);
    mMediaPlayer.setOnErrorListener(ErrorListener);
    }

    }
        
    public void releaseMeidaPlayer(){
    if (mMediaPlayer.isPlaying()) {
    mMediaPlayer.stop();// 停止
    }
    mMediaPlayer.reset();
    mMediaPlayer.release();
    }

    public void play(String path,boolean isRun){
    if(!isRun){
    mMediaPlayer.reset();// 重置
    try {
    mMediaPlayer.setDataSource(path);
    mMediaPlayer.prepare();
    } catch (IllegalArgumentException e) {
    e.printStackTrace();
    } catch (IllegalStateException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }

    }else{
    mMediaPlayer.start();
    }
    }

    public void playFromAsset(String path ,boolean isRun,AssetManager asm){
    if(!isRun){
    mMediaPlayer.reset();// 重置
    try {
    AssetFileDescriptor afd = asm.openFd(path);
    mMediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(),afd.getLength());
    mMediaPlayer.prepare();
    } catch (IllegalArgumentException e) {
    e.printStackTrace();
    } catch (IllegalStateException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }

    }else{
    mMediaPlayer.start();
    }
    }

    public boolean stop(){

    boolean ret = mMediaPlayer.isPlaying();
    if(ret){
    mMediaPlayer.stop();
    }
    return ret ;
    }

    public void stopWhenEnd(){
    mMediaPlayer.stop();
    Log.d(">>>>>>>>>>>", "position=="+mMediaPlayer.getCurrentPosition());
    }

    public boolean pause(){
    boolean ret = mMediaPlayer.isPlaying();
    if(ret){
    mMediaPlayer.pause();
    }
    return ret ;
    }

    public void start(){
    if(null != mMediaPlayer){
    mMediaPlayer.start();
    }
    }

    public boolean isPlaying(){
    return mMediaPlayer.isPlaying();
    }

    public int getDuration(){
    return mMediaPlayer.getDuration();
    }

    public int getCurrentPosition(){
    return mMediaPlayer.getCurrentPosition();
    }

    public void seekTo(int progress){
    mMediaPlayer.seekTo(progress);
    }

    public void setDisplay(SurfaceHolder holder){
    mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    mMediaPlayer.setDisplay(holder);//设置Video影片以SurfaceHolder播放 
    }

    public void release(){
    mMediaPlayer.release();
    }

    public void playWhenAppStart(){
    soundId =soundpool.load(this, R.raw.app_start_music, 1);
    Log.d(">>>>>>>>>>>>>>", "soundpool.........");
    }

    public void setVolume(float lv,float rv){
    mMediaPlayer.setVolume(lv, rv);
    }
    }有一个叫做LiteListen的开源播放器  你找找 ,可以参考
      

  2.   

    mMediaPlayer.reset();
    mMediaPlayer.setDataSource(path);
    mMediaPlayer.setOnCompletionListener(mCompleteListener);
    mMediaPlayer.setLooping(false);
    mMediaPlayer.prepare(); 
    重新设置一下dataSource  监听播放完事件用 setOnCompletionListener