2012-05-21 2 views
1

사용자가 특정 노래를 클릭 할 때마다 호출되는 활동 내에 MediaPlayer가 있습니다. MediaPlayer가 재생되면 사용자가 다시 클릭하면 다른 노래를 선택할 수 있습니다.Android MediaPlayer - 활동이 인스턴스화 될 때마다 원치 않는 새 인스턴스가 생성됩니다.

문제는 두 번째 노래를 선택하면 MediaPlayer가 다시 만들어지고 두 곡이 동시에 재생되기 시작한다는 것입니다. 나는 "MediaPlayer.isplaying, MediaPlayer.stop if"을 사용하려고 시도했지만, 사용자가 뒤로 누르고 다른 노래를 스크롤하자마자 MediaPlayer가 멈 춥니 다.

코드는 다음과 같습니다. 자바에 대한 이해가 제한되어 있으므로 답변을 기본으로 유지할 수 있다면 고맙겠습니다 (개발을 시도하고 있습니다!).

활동이 포함 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(); 
     } 

    } 

} 

감사합니다.

답변

0

Services에 MediaPlayer를 유연하게 제어 할 수 있습니다. 모든 활동에서 재생/일시 중지하는 것은 간단합니다.

+0

답변 해 주셔서 감사합니다. Primož, 서비스에 대한 독서를해야 할 것입니다. 이것은 쉽게 구현할 수 있습니까? –

+0

당신은 약간의 독서를해야 할 것이지만 실제로 나중에 그것을 구현하는 것이 간단합니다. [여기] (http://marakana.com/forums/android/examples/60.html)는 예입니다.) –