Android studio中的音乐应用程序(媒体播放器)出错

Android studio中的音乐应用程序(媒体播放器)出错,android,android-mediaplayer,audio-player,android-music-player,Android,Android Mediaplayer,Audio Player,Android Music Player,我正在尝试在android studio中制作一个音乐应用程序。我的应用程序运行良好,只是有一个小错误。在我的主要活动中,我有一个从资源文件夹中的原始文件夹导入的歌曲列表。我的第二个窗口是一个正在播放的java文件,在这里我可以暂停、转发并查看歌曲的歌词 当我播放主活动的第一首歌时,效果很好。但是,当我想在播放第一首歌的同时播放第二首歌时,第二首歌会在第一首歌的基础上播放。歌词得到更新,搜索栏得到更新,但这两首歌一起播放。但是,当我暂停第一首歌,返回主要活动并播放第二首歌时,不会发生这种情况。

我正在尝试在android studio中制作一个音乐应用程序。我的应用程序运行良好,只是有一个小错误。在我的主要活动中,我有一个从资源文件夹中的原始文件夹导入的歌曲列表。我的第二个窗口是一个正在播放的java文件,在这里我可以暂停、转发并查看歌曲的歌词

当我播放主活动的第一首歌时,效果很好。但是,当我想在播放第一首歌的同时播放第二首歌时,第二首歌会在第一首歌的基础上播放。歌词得到更新,搜索栏得到更新,但这两首歌一起播放。但是,当我暂停第一首歌,返回主要活动并播放第二首歌时,不会发生这种情况。 我用过:

我知道我的NowPlaying.java文件中有一个错误:下面是完整的代码:

另外,我只是在学习过程中

MediaPlayer song = null;
SeekBar seekBar;
Intent intent = getIntent();


protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_now_playing);

    seekBar = (SeekBar) findViewById(R.id.seekBar);
    //String selectedSong =  getIntent().getExtras().getString("selectSong");


    selectSong();


    //for pause button
    pauseButton();

    //for songtile
    getSongtitle();

    getSongList();
    getNextButton();
    getPreviousButton();

} // end of onCreate method


/**
 * Method for selecting the song
 * Moves to startSong method
 */
public void selectSong(){


    TextView lyricsBox = (TextView) findViewById(R.id.lyricsBox);
    lyricsBox.setMovementMethod(new ScrollingMovementMethod());
    String nextPlay = intent.getStringExtra("playSong");

    if(song != null){
        if(song.isPlaying()){
            song.reset();
            song = null;
        }
    }

    if (nextPlay.equals("Demons")) {
        song = MediaPlayer.create(this, R.raw.demons);
        lyricsBox.setText(R.string.demonsLyrics);

    } else if (nextPlay.equals("Black Space")) {
        song = MediaPlayer.create(this, R.raw.blankspace);
        lyricsBox.setText(R.string.blankspaceLyrics);

    } else if (nextPlay.equals("Case 420")) {
        song = MediaPlayer.create(this, R.raw.case420);
        lyricsBox.setText(R.string.case420Lyrics);
    }
    else if(nextPlay.equals("Jalma")){
        song = MediaPlayer.create(this, R.raw.jalma);
        lyricsBox.setText(R.string.jalmaLyrics);
    }
    else if(nextPlay.equals("Parelima")){
        song = MediaPlayer.create(this, R.raw.parelima);
        lyricsBox.setText(R.string.parelimaLyrics);
    }

    else if(nextPlay.equals("Mero Balyakal Ko Sathi")){
        song = MediaPlayer.create(this, R.raw.balyakalsathi);
        lyricsBox.setText(R.string.balyakalSathi);
    }

    else if(nextPlay.equals("Euta Sathi")){
        song = MediaPlayer.create(this, R.raw.eutasathi);

    }
    else if(nextPlay.equals("Audai Jadai")){
        song = MediaPlayer.create(this, R.raw.audaijadai);

    }
    else if(nextPlay.equals("Cheerleader")){
        song = MediaPlayer.create(this, R.raw.cheerleader);

    }



    // to start playing the song
    startButton();
}



//method to make sure seekbar updates till song ends
Runnable run = new Runnable() {
    @Override
    public void run() {
        getseekBar();
    }
};

/**
 * Method to start song (play the song)
 *
 */
public void startButton() {
        song.start();
    //to update seek bar
    getseekBar();
}




/**
 * Method to update the seekbar.
 * implement touch in seekbar to change song position
 */
public void getseekBar() {
    seekBar.setMax(song.getDuration());
    seekBar.setProgress(song.getCurrentPosition());
    seekBar.postDelayed(run, 1000);

    seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

        int seek_to;
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
             seek_to = progress;

        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
            song.seekTo(seek_to);
        }
    });
}


/**
 * Method for pause Button
 * to pause song once clicked and change button background to play image
 * Again play the song if the button is pressed again. and change background back to pause image
 */
public void pauseButton(){
    final Button playButton = (Button) findViewById(R.id.playButton);

    playButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (song.isPlaying()) {
                playButton.setBackgroundResource(R.drawable.playbutton);
                song.pause();

            } else {
                playButton.setBackgroundResource(R.drawable.pausebutton);
                song.start();

            }

        }
    });
}

/**
 * Method to get the song title from first java file and display in the title
 */
public void getSongtitle(){

    Intent intent = getIntent();
    String nextPlay = intent.getStringExtra("playSong");
    TextView Songtitle = (TextView) findViewById(R.id.Songtitle);
    Songtitle.setText(nextPlay);
}

/**
 * Method for song list button
 * Goes back to the first java file once the button is cliked,
 * displays the song list
 */

public void getSongList(){

    Button lyricsButton = (Button) findViewById(R.id.lyricsButton);
    lyricsButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startActivity(new Intent(NowPlaying.this, MainActivity.class));
        }
    });

}

/**
 * Method for next button
 * the song skips every 10 seconds once clicked
 */

public void getNextButton(){

    Button nextButton = (Button) findViewById(R.id.nextButton);
    nextButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            int startTime = song.getCurrentPosition();
            int forwardTime = 10000;
            startTime += forwardTime;
            if(startTime <= song.getDuration()){

                song.seekTo(startTime);
            }

            else{
                song.stop();

            }


        }
    });

} // end of getNextButton


/**
 * Method for previous button
 * the song skips back 10 seconds once clicked
 */
public void getPreviousButton(){

    Button previousButton = (Button) findViewById(R.id.previousButton);
    previousButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            int startTime = song.getCurrentPosition();
            int previousTime = 10000;
            startTime -= previousTime;

            if(startTime >= 0){
                song.seekTo(startTime);
            }
           else{
               song.seekTo(0);
                song.start();
            }
        }
    });
}
MediaPlayer歌曲=null;
SeekBar-SeekBar;
Intent=getIntent();
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u正在播放);
seekBar=(seekBar)findViewById(R.id.seekBar);
//String selectedSong=getIntent().getExtras().getString(“selectSong”);
选择歌曲();
//用于暂停按钮
pauseButton();
//给松瓦
getSongtitle();
getSongList();
getNextButton();
getPreviousButton();
}//onCreate方法的结束
/**
*选择歌曲的方法
*移动到startSong方法
*/
公共歌曲(){
TextView-lyricsBox=(TextView)findViewById(R.id.lyricsBox);
setMovementMethod(新的ScrollingMovementMethod());
String nextPlay=intent.getStringExtra(“播放歌曲”);
如果(歌曲!=null){
if(song.isPlaying()){
song.reset();
宋=空;
}
}
如果(nextPlay.equals(“恶魔”)){
宋=MediaPlayer.create(这个,R.raw.demons);
lyricsBox.setText(R.string.desmophries);
}else if(nextPlay.equals(“黑色空间”)){
song=MediaPlayer.create(这个,R.raw.blankspace);
lyricsBox.setText(R.string.blankspacelyrs);
}else if(nextPlay.equals(“案例420”)){
song=MediaPlayer.create(这个,R.raw.case420);
lyricsBox.setText(R.string.Case420Lyps);
}
否则如果(nextPlay.equals(“Jalma”)){
song=MediaPlayer.create(这个,R.raw.jalma);
lyricsBox.setText(R.string.jalmaLyrics);
}
else if(nextPlay.equals(“Parelima”)){
song=MediaPlayer.create(this,R.raw.parelima);
lyricsBox.setText(R.string.parelimaLyrics);
}
else if(nextPlay.equals(“Mero Balyakal Ko Sathi”)){
song=MediaPlayer.create(这个,R.raw.balyakalsati);
lyricsBox.setText(R.string.Balyakalsati);
}
else if(nextPlay.equals(“Euta Sathi”)){
song=MediaPlayer.create(这个,R.raw.eutasathi);
}
else if(nextPlay.equals(“Audai Jadai”)){
song=MediaPlayer.create(这个,R.raw.audaijadai);
}
else if(nextPlay.equals(“啦啦队长”)){
song=MediaPlayer.create(这个,R.raw.Cheerreader);
}
//开始演奏这首歌
开始按钮();
}
//方法确保seekbar更新,直到歌曲结束
Runnable run=new Runnable(){
@凌驾
公开募捐{
getseekBar();
}
};
/**
*开始歌曲的方法(播放歌曲)
*
*/
公共无效开始按钮(){
song.start();
//更新搜索栏的步骤
getseekBar();
}
/**
*方法更新seekbar。
*在seekbar中执行触摸以更改乐曲位置
*/
public void getseekBar(){
seekBar.setMax(song.getDuration());
seekBar.setProgress(song.getCurrentPosition());
seekBar.postDelayed(运行,1000);
seekBar.setOnSeekbarchaneListener(新的seekBar.onSeekbarchaneListener(){
int seek_to;
@凌驾
public void onProgressChanged(SeekBar-SeekBar、int-progress、boolean-fromUser){
追求进步;
}
@凌驾
开始跟踪触摸时的公共无效(SeekBar SeekBar){
}
@凌驾
TopTrackingTouch(SeekBar SeekBar)上的公共无效{
song.seekTo(seek_to);
}
});
}
/**
*暂停按钮的方法
*单击后暂停歌曲并更改按钮背景以播放图像
*如果再次按下按钮,请再次播放歌曲。并将背景更改回暂停图像
*/
公共无效暂停按钮(){
最终按钮playButton=(按钮)findViewById(R.id.playButton);
playButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
if(song.isPlaying()){
playButton.setBackgroundResource(R.drawable.playButton);
歌曲。暂停();
}否则{
playButton.setBackgroundResource(R.drawable.pausebutton);
song.start();
}
}
});
}
/**
*方法从第一个java文件中获取歌曲标题并显示在标题中
*/
public void getSongtitle(){
Intent=getIntent();
String nextPlay=intent.getStringExtra(“播放歌曲”);
TextView Songtitle=(TextView)findViewById(R.id.Songtitle);
Songtitle.setText(下一个播放);
}
/**
*歌曲列表按钮的方法
*点击按钮后返回到第一个java文件,
*显示歌曲列表
*/
public void getSongList(){
按钮lyricsButton=(按钮)findViewById(R.id.lyricsButton);
lyricsButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
startActivity(新意图(NowPlaying.this,MainActivity.class));
}
});
}
/**
*下一步按钮的方法
*单击后,歌曲每10秒跳过一次
*/
public void getNextButton(){
按钮nextButton=(按钮)findViewById(R.id.nextButton);
setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
int startTime=song.getCurrentPosition();
MediaPlayer song = null;
SeekBar seekBar;
Intent intent = getIntent();


protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_now_playing);

    seekBar = (SeekBar) findViewById(R.id.seekBar);
    //String selectedSong =  getIntent().getExtras().getString("selectSong");


    selectSong();


    //for pause button
    pauseButton();

    //for songtile
    getSongtitle();

    getSongList();
    getNextButton();
    getPreviousButton();

} // end of onCreate method


/**
 * Method for selecting the song
 * Moves to startSong method
 */
public void selectSong(){


    TextView lyricsBox = (TextView) findViewById(R.id.lyricsBox);
    lyricsBox.setMovementMethod(new ScrollingMovementMethod());
    String nextPlay = intent.getStringExtra("playSong");

    if(song != null){
        if(song.isPlaying()){
            song.reset();
            song = null;
        }
    }

    if (nextPlay.equals("Demons")) {
        song = MediaPlayer.create(this, R.raw.demons);
        lyricsBox.setText(R.string.demonsLyrics);

    } else if (nextPlay.equals("Black Space")) {
        song = MediaPlayer.create(this, R.raw.blankspace);
        lyricsBox.setText(R.string.blankspaceLyrics);

    } else if (nextPlay.equals("Case 420")) {
        song = MediaPlayer.create(this, R.raw.case420);
        lyricsBox.setText(R.string.case420Lyrics);
    }
    else if(nextPlay.equals("Jalma")){
        song = MediaPlayer.create(this, R.raw.jalma);
        lyricsBox.setText(R.string.jalmaLyrics);
    }
    else if(nextPlay.equals("Parelima")){
        song = MediaPlayer.create(this, R.raw.parelima);
        lyricsBox.setText(R.string.parelimaLyrics);
    }

    else if(nextPlay.equals("Mero Balyakal Ko Sathi")){
        song = MediaPlayer.create(this, R.raw.balyakalsathi);
        lyricsBox.setText(R.string.balyakalSathi);
    }

    else if(nextPlay.equals("Euta Sathi")){
        song = MediaPlayer.create(this, R.raw.eutasathi);

    }
    else if(nextPlay.equals("Audai Jadai")){
        song = MediaPlayer.create(this, R.raw.audaijadai);

    }
    else if(nextPlay.equals("Cheerleader")){
        song = MediaPlayer.create(this, R.raw.cheerleader);

    }



    // to start playing the song
    startButton();
}



//method to make sure seekbar updates till song ends
Runnable run = new Runnable() {
    @Override
    public void run() {
        getseekBar();
    }
};

/**
 * Method to start song (play the song)
 *
 */
public void startButton() {
        song.start();
    //to update seek bar
    getseekBar();
}




/**
 * Method to update the seekbar.
 * implement touch in seekbar to change song position
 */
public void getseekBar() {
    seekBar.setMax(song.getDuration());
    seekBar.setProgress(song.getCurrentPosition());
    seekBar.postDelayed(run, 1000);

    seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

        int seek_to;
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
             seek_to = progress;

        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
            song.seekTo(seek_to);
        }
    });
}


/**
 * Method for pause Button
 * to pause song once clicked and change button background to play image
 * Again play the song if the button is pressed again. and change background back to pause image
 */
public void pauseButton(){
    final Button playButton = (Button) findViewById(R.id.playButton);

    playButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (song.isPlaying()) {
                playButton.setBackgroundResource(R.drawable.playbutton);
                song.pause();

            } else {
                playButton.setBackgroundResource(R.drawable.pausebutton);
                song.start();

            }

        }
    });
}

/**
 * Method to get the song title from first java file and display in the title
 */
public void getSongtitle(){

    Intent intent = getIntent();
    String nextPlay = intent.getStringExtra("playSong");
    TextView Songtitle = (TextView) findViewById(R.id.Songtitle);
    Songtitle.setText(nextPlay);
}

/**
 * Method for song list button
 * Goes back to the first java file once the button is cliked,
 * displays the song list
 */

public void getSongList(){

    Button lyricsButton = (Button) findViewById(R.id.lyricsButton);
    lyricsButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startActivity(new Intent(NowPlaying.this, MainActivity.class));
        }
    });

}

/**
 * Method for next button
 * the song skips every 10 seconds once clicked
 */

public void getNextButton(){

    Button nextButton = (Button) findViewById(R.id.nextButton);
    nextButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            int startTime = song.getCurrentPosition();
            int forwardTime = 10000;
            startTime += forwardTime;
            if(startTime <= song.getDuration()){

                song.seekTo(startTime);
            }

            else{
                song.stop();

            }


        }
    });

} // end of getNextButton


/**
 * Method for previous button
 * the song skips back 10 seconds once clicked
 */
public void getPreviousButton(){

    Button previousButton = (Button) findViewById(R.id.previousButton);
    previousButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            int startTime = song.getCurrentPosition();
            int previousTime = 10000;
            startTime -= previousTime;

            if(startTime >= 0){
                song.seekTo(startTime);
            }
           else{
               song.seekTo(0);
                song.start();
            }
        }
    });
}
 String[] songList;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    populateList();
}

private void populateList(){
     songList = new String[] {"Jalma", "Demons", "Parelima", "Mero Balyakal Ko Sathi", "Audai Jadai",
             "Case 420", "Euta Sathi", "Cheerleader"};

    ListAdapter arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,
            songList);

    ListView theList = (ListView) findViewById(R.id.theList);
    theList.setAdapter(arrayAdapter);

    theList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            ListView theList = (ListView) findViewById(R.id.theList);
            startActivity(new Intent(MainActivity.this, NowPlaying.class));
           String selectedSong = (String) (theList.getItemAtPosition(position));

            Intent toSecondActivity = new Intent(getApplicationContext(), NowPlaying.class);

            toSecondActivity.putExtra("playSong", selectedSong);
            startActivity(toSecondActivity);

        }
    });


}
theList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        String selectedSong = (String) (theList.getItemAtPosition(position));

        Intent toSecondActivity = new Intent(MainActivity.this, NowPlaying.class);
        toSecondActivity.putExtra("playSong", selectedSong);
        startActivity(toSecondActivity);

    }
});
I am also facing the same issue.Songs are playing on top of each other. Finally I found the answer from a video.
https://www.youtube.com/watch?v=4DC4XFWVFls


//For Play Button OnClick Listener

public void onClick(View v) {

                if(mediaPlayer !=null)
                {
                    mediaPlayer.release();
                }
                mediaPlayer = MediaPlayer.create(context, songList.getSong());
                mediaPlayer.start();
}

//For Stop Button

 public void onClick(View v) {
                mediaPlayer.stop();
            }

This code worked properly for me.
protected void onCreate(Bundle savedInstanceState) {   
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_now_playing);
    .......

    @Override
    public void onDestroy(){
       if(song.isplaying())
       {
          song.pause();
          song.release();
       }
       super.onDestroy();
    }
}