【问题标题】:how can i play one song at a time in android studio我如何在 android studio 中一次播放一首歌曲
【发布时间】:2018-10-21 02:27:02
【问题描述】:

在我的音乐播放器中,如果一首歌曲已经在播放,并且如果用户点击另一首歌曲,那么该歌曲也会开始播放。换句话说,一次播放多首歌曲,这真的很烦人。我一次想要一首歌。这意味着如果一首歌曲已经在播放,并且如果用户点击另一首歌曲,那么前一首歌曲将会停止,而点击的歌曲将会播放。

java代码

  public void onItemClick(final Button b, View view, final SongInfo obj, int position) {


                if(b.getText().equals("Stop")){
                    mediaPlayer.stop();
                    mediaPlayer.reset();
                    mediaPlayer.release();
                    mediaPlayer = null;
                    b.setText("Play");
                }
                else {

                    Runnable runnable = new Runnable() {
                        @Override
                        public void run() {
                            try {
                                mediaPlayer = new MediaPlayer();
                                mediaPlayer.setDataSource(obj.getSongUrl());
                                mediaPlayer.prepareAsync();
                                mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                                    @Override
                                    public void onPrepared(MediaPlayer mp) {
                                        mediaPlayer.start();
                                        seekBar.setProgress(0);
                                        seekBar.setMax(mediaPlayer.getDuration());
                                        Log.d("Prog", "run: " + mediaPlayer.getDuration());
                                    }
                                });
                                b.setText("Stop");
                                }catch (Exception e){}
                        }

                    };
                    myHandler.postDelayed(runnable,100);

                }
            }
        });
        checkUserPermission();
        Thread t = new runThread();
        t.start();
    }




    //Thread method for seek bar
    public class runThread extends Thread {
        @Override
        public void run() {
            while (true) {

                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                Log.d("Runwa", "run: " + 1);
                if (mediaPlayer != null) {
                    seekBar.post(new Runnable() {
                        @Override
                        public void run() {
                            seekBar.setProgress(mediaPlayer.getCurrentPosition());
                        }
                    });

                    Log.d("Runwa", "run: " + mediaPlayer.getCurrentPosition());
                }
            }
        }

    }

【问题讨论】:

    标签: android android-studio audio-player android-music-player


    【解决方案1】:
    if("STOP".equalsIgnoreCase(b.getText()) {
        mediaPlayer.stop()  // stop the media player
        mediaPlayer.reset() // reset media player for re-use
        b.setText("Play");  // to re-play song
    } else {
        // use the same instance of media-player if want to play single song at a time
        mediaPlayer.setDataSource(obj.getSongUrl());
        mediaPlayer.prepare(); // can use prepareAsync() also
        mediaPlayer.start();
        b.setText("Stop");
    }
    

    要一次只播放一首歌曲,您必须始终使用相同的mediaPlayer 对象实例。 (见内联 cmets)

    参考:Media Player State Diagram

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多