Android MediaPlayer-每当活动实例化时都会创建不需要的新实例

Android MediaPlayer-每当活动实例化时都会创建不需要的新实例,android,media-player,android-activity,recreate,Android,Media Player,Android Activity,Recreate,我在一个活动中有一个MediaPlayer,每当用户点击一首特定的歌曲时就会调用它。MediaPlayer播放后,如果用户单击“上一步”,他们可以选择另一首歌曲 问题是,在选择第二首歌曲时,MediaPlayer会再次创建,两首歌曲同时开始播放。我曾尝试在活动开始时使用if MediaPlayer.isplay、MediaPlayer.stop,但一旦用户按下后退并滚动另一首歌曲,MediaPlayer就会停止 代码如下所示。如果您能将答案保持基本,我将不胜感激,因为我对我正在尝试开发的java

我在一个活动中有一个MediaPlayer,每当用户点击一首特定的歌曲时就会调用它。MediaPlayer播放后,如果用户单击“上一步”,他们可以选择另一首歌曲

问题是,在选择第二首歌曲时,MediaPlayer会再次创建,两首歌曲同时开始播放。我曾尝试在活动开始时使用if MediaPlayer.isplay、MediaPlayer.stop,但一旦用户按下后退并滚动另一首歌曲,MediaPlayer就会停止

代码如下所示。如果您能将答案保持基本,我将不胜感激,因为我对我正在尝试开发的java了解有限

包含MediaPlayer的活动:

package music.tabber;

import java.io.IOException;

import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageButton;
import android.widget.TextView;

public class MusicPlayer extends Activity {

    private ImageButton playButton;
    private TextView songTitleLabel;
    private TextView songArtistLabel;
    private MediaPlayer mediaPlayer = new MediaPlayer();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.playing);

        Bundle extras = getIntent().getExtras();
        String songPath = extras.getString("songPath");
        String songTitle = extras.getString("songTitle");
        String songArtist = extras.getString("songArtist");

        playButton = (ImageButton) findViewById(R.id.playButton);
        songTitleLabel = (TextView) findViewById(R.id.songTitleLabel);
        songArtistLabel = (TextView) findViewById(R.id.songArtistLabel);

        playSong(songPath); 

        songArtistLabel.setText(songArtist);
        songTitleLabel.setText(songTitle);


        playButton.setOnClickListener(new View.OnClickListener() {

            public void onClick(View arg0) {
                if(mediaPlayer.isPlaying()){
                    if(mediaPlayer!=null){
                        mediaPlayer.pause();
                        playButton.setImageResource(R.drawable.ic_play);
                    }

                }else{
                    if(mediaPlayer!=null){
                        mediaPlayer.start();
                        playButton.setImageResource(R.drawable.ic_pause);
                    }
                }
           }

        });

    }

    private void playSong(String songPath) {
        try {
            mediaPlayer.reset();
            mediaPlayer.setDataSource(songPath);
            mediaPlayer.prepare();
            mediaPlayer.start();

            // Changing Button Image to pause image
            playButton.setImageResource(R.drawable.ic_pause);

        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}

谢谢你的帮助。

也许你想考虑对MealApple有一个灵活的控制。在任何活动中播放/暂停都很简单。

谢谢您的回答Primož,我需要阅读一些有关服务的内容。实现起来有这么容易吗?你需要做一些阅读,但实际上它很容易在以后实现。这是一个例子;