как я могу играть одну песню за раз в андроид студии - PullRequest
0 голосов
/ 21 октября 2018

В моем музыкальном проигрывателе, если одна песня уже воспроизводится, и если пользователь нажимает на другую песню, эта песня также начинает воспроизводиться.Другими словами, есть несколько песен, играющих в одно время, это действительно раздражает.Я хочу одну песню за раз.Это означает, что если песня уже воспроизводится, и если пользователь нажимает на другую песню, предыдущая песня останавливается и воспроизводимая по нажатию песня.

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());
                }
            }
        }

    }

1 Ответ

0 голосов
/ 21 октября 2018
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.(См. Встроенные комментарии)

Ссылка: Диаграмма состояния медиаплеера

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...