在Android Media Player中播放音乐的问题

时间:2014-01-19 11:23:10

标签: android media-player

首先,播放和停止音乐工作正常。我已经搜索了SX,并尝试了针对此问题列出的一些解决方案,但他们还没有解决我的问题。

我有一个“重播音乐”按钮,它应该从头开始重新启动.mp3文件。我已经有了必要的代码(比如reset(),prepare()等,以便媒体播放器重放音乐,但是当按下按钮时,没有任何反应。

我已经设置了所有OnClickListeners和其他必要的东西,这只是一个问题。

以下是我的“重播音乐”方法的完整代码。我们将非常感激地提供任何帮助。

只是一个想法:也许它与mediaPlayer.start()方法调用的位置有关?

public void replaySoundButtonListener() {
    Button testButton = (Button) findViewById(R.id.replayMusicButton);
    testButton.setOnClickListener(new OnClickListener() {

@Override   
public void onClick(View arg0) {

   mediaPlayer.reset();
   try {
        mediaPlayer.setDataSource("sdcard/InsomniMusic/insomnimix.mp3");
    } catch (IllegalArgumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SecurityException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalStateException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }      
try {
    mediaPlayer.prepare();
} catch (IllegalStateException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
   mediaPlayer.start();     
}   
    });
}

2 个答案:

答案 0 :(得分:1)

您只需准备和设置一次媒体播放器的数据源。当您调用reset时,必须完全重新初始化媒体播放器(再次设置数据源并调用prepare)。如果您想将媒体播放器重置为歌曲的开头,我猜您可以使用

mediaPlayer.setOnSeekCompleteListener(new MediaPlayer.OnSeekCompleteListener() {
    @Override
    public void onSeekComplete(MediaPlayer mediaPlayer) {
        mediaPlayer.start();
    }
});

如果歌曲已经结束(或以其他方式停止),只有mediaPlayer.start()就足够了(但我想在你的情况下你永远无法确定)。

有关开始功能here

的更多信息

答案 1 :(得分:1)

  I made a functions to start() stop() reset() and pause() in another Class

    import android.content.Context;
    import android.media.MediaPlayer;

    public class AudioPlayer extends MediaPlayer {
        private MediaPlayer mPlayer;

        public void stop()
        {
            if(mPlayer!=null)
            {
                mPlayer.release();
                mPlayer=null;
            }
        }
        public void pause()
        {       
            if(mPlayer.isPlaying())     {
                mPlayer.pause();
                    }
            else
            {
                mPlayer.start();
            }
        }

        public void reset(Context c)
        {
            stop();

            mPlayer=MediaPlayer.create(c, R.raw.one_small_step); //uzimamo .create(context,..) jer uzimamo iz res/raw lokalne datoteke

            mPlayer.setOnCompletionListener(new OnCompletionListener() {

                @Override
                public void onCompletion(MediaPlayer mp) {
                    stop(); 
                }
            });

            mPlayer.start();
        }


        public void play(Context c)
        {
            stop();

            mPlayer=MediaPlayer.create(c, R.raw.one_small_step);

            mPlayer.setOnCompletionListener(new OnCompletionListener() {

                @Override
                public void onCompletion(MediaPlayer mp) {
                    stop(); 
                }
            });

            mPlayer.start();
        }
    }

      //Here is my fragment

    private Button mPlayButton;
    private Button mStopButton;
    private Button mPauseButton;
    private Button mResetButton;
    private AudioPlayer mPlayer=new AudioPlayer();

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

            View v=getActivity().getLayoutInflater().inflate(R.layout.fragment_hello_moon, container);

            mPlayButton=(Button)v.findViewById(R.id.hellomoon_playButton);
            mPlayButton.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    mPlayer.play(getActivity());
                }
            });
            mStopButton=(Button)v.findViewById(R.id.hellomoon_stopButton);
            mStopButton.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {

                    mPlayer.stop(); 

                }
            });

            mPauseButton=(Button)v.findViewById(R.id.hellomoon_pauseButton);
            mPauseButton.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    mPlayer.pause();

                }
            });

            mResetButton=(Button)v.findViewById(R.id.hellomoon_resetButton);
            mResetButton.setOnClickListener(new OnClickListener(
                    ) {

                @Override
                public void onClick(View v) {

                    mPlayer.reset(getActivity());

                }
            });
            return v;
    }


    @Override
    public void onDestroy() {
        super.onDestroy();
        mPlayer.stop(); //Nakon sto je fragment unisten MediaPlayer nastavlja radit jer je na drugacijem Threadu pa treba pozvati Stop();

    }