仅使用1个Media Player实例在同一个按钮上播放和暂停Media Player?

时间:2014-03-12 12:55:38

标签: android media-player

我的应用程序和1个媒体播放器中有25个按钮。我想要的:当我第一次点击播放声音时。当我第二次点击停止声音时 但是会发生什么:当我第一次点击它开始播放声音时,当我再次点击时,它不会停止它,而是从头开始再次播放它。 我的代码:

MediaPlayer mp;
    if(mp!=null)
                        {
                            mp.release();
                            mp=null;
                        }

                        mp = MediaPlayer.create(MainActivity.this, R.raw.s5awesomeguitar);
                        mp.start();

如何设置我的代码,在第一次点击时播放Media Player,在第二次点击停止声音。在同一个按钮上 完整代码:

gridView.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {

        switch (position) {
        case 0:
             if(mp!=null)
             {
                 mp.release();
                 mp=null;
             }
             else {
             mp = MediaPlayer.create(Sadrzaj.this, R.raw.s3djclubmix);
             mp.start();

             }

        break; 
            case 1:
                 if(mp!=null)
                 {
                     mp.release();
                     mp=null;
                 }
                 else {
                 mp = MediaPlayer.create(Sadrzaj.this, R.raw.s16dance);
                 mp.start();

                 }
            break;
            case 2:
                 if(mp!=null)
                 {
                     mp.release();
                     mp=null;
                 }
                 else {
                 mp = MediaPlayer.create(Sadrzaj.this, R.raw.s13ring);
                 mp.start();

                 }

                break;

5 个答案:

答案 0 :(得分:2)

MediaPlayer是状态机,here是Doc。

所以,首先,阅读文档,状态图说:release()=&gt;结束。

因此,如果您想使用不同的按钮控制相同的曲目,请不要拨打release();并在您的案例之间设置mp = null;

Dhaval为您提供了正确的解决方案:

if (mp.isPlaying()) { mp.pause() } else { mp.play() }

另外,为了正确释放播放器,请先调用reset()然后释放(),否则你会收到警告说&#34;玩家去处理未经处理的事件。&#34;或类似的东西。

请确保您了解状态图,它将像魅力一样工作:)

总结:

  1. 阅读文档:)

  2. 检查播放器的播放状态

  3. 删除对release()

  4. 的不必要调用
  5. 完成后正确释放播放器
  6. 希望这有帮助!

    编辑: 好的,这就是我要做的事情:(它可能无法编译,我这里只有一个文本编辑器,所以抱歉^^)

    在你的活动中(我想): 您的活动必须实施onPreparedListener

        @Override
    onCreate() {
    if(mMediaPlayer == null) {
            mMediaPlayer = new MediaPlayer()
            mMediaPlayer.setOnPreparedListener(this); //registers your activity as the onPrepared Listener
        }
        ...
    }
    
    //Called back when media is ready to be played
    @Override
    onPrepared() {
        if(mMediaPlayer != null){
            mMediaPlayer.start();
        }
    }
    
    
    gridView.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {
    
        switch (position) {
            case 0:
                ..
                break;
            case 1:
             if(mMediaPlayer.isPlaying() {
                mMediaPlayer.pause();
             } else {
                 mMediaPlayer.reset();
                 mMediaPlayer.setDataSource(Sadrzaj.this, R.raw.s16dance);
                 mMediaPlayer.prepareAsync();//call back onPrepared()
                 //mMediaPlayer.start();  sorry little mistake here no need to call start(); since it is called in onPrepared()
             }
             break;
             default:
                if(mMediaPlayer != null) {
                    mMediaPlayer.reset();
                    mMediaPlayer.release();
                    mMediaPlayer = null;
                }
                break;
        }
    }
    
    //Release the player and de listener
    @Override
    onDestroy() {
        if(mMediaPlayer != null) {
            mMediaPlayer.setOnPreparedListener(null);
            mMediaPlayer.reset();
            mMediaPlayer.release();
            mMediaPlayer = null
        }
    }
    

答案 1 :(得分:0)

您需要创建一个绑定到播放器的服务。该服务将是实际播放/改变音轨的服务,并且由于它们受到限制,因此玩家的活动将被更新。

答案 2 :(得分:0)

你没有提供太多信息,但我会给你逻辑。

if(ButtonClick % 2 == 0){
    //Start playing the music
} else {
    //Stop playing the music
}

int i = 1;

                Button.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                   if(i == 1){
                         //StartPlaying music .play();
                         i = 2
                   } else if (i==2){
                        //StopPlaying the music .stop();
                        i = 1
                   }
            }
    });

我建议你使用第二种方法。

答案 3 :(得分:0)

检查媒体播放器是否正在播放,如果是,则更改逻辑以暂停播放。否则就这样做了。

答案 4 :(得分:0)

              Button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
               if(mp.isPlaying()){
                     //StartPlaying music .play();
                    mp.pause();
               } else {
                    mp.start();
               }
        }
});