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

1

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

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

    }

}

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

Теги:
android-activity
media-player
recreate

1 ответ

0
Лучший ответ

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

  • 0
    Спасибо за ваш ответ Primož, мне придется немного почитать об услугах. Это легко реализовать?
  • 0
    Вам нужно будет немного почитать, но на самом деле потом реализовать это просто. Вот пример;)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню