Android MediaPlayer - нежелательный новый экземпляр, созданный при создании экземпляра активности

У меня есть MediaPlayer внутри действия, которое вызывается всякий раз, когда пользователь нажимает на конкретную песню. Когда проигрыватель MediaPlayer воспроизводится, если пользователь нажимает кнопку назад, он может выбрать другую песню.

Проблема заключается в том, что при выборе второй песни MediaPlayer создается снова, и сразу начинают воспроизводиться две песни. Я пытался использовать "if MediaPlayer.isplaying, 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();
        }

    }

}

Спасибо за вашу помощь.

1 ответ

Решение

Возможно, вы хотите, чтобы Сервисы имели гибкий контроль над MediaPlayer. Это просто играть / пауза от любой деятельности.

Другие вопросы по тегам