2016-07-26 2 views
0

Android에서 mediaplayer 기능을 사용하고 있습니다. 기본적으로 원본 폴더에 노래가 있고 새로운 트랙으로 바꾸고 싶지만 실패합니다. 하나의 음악 파일이 재생 된 다음 임의의 트랙으로 건너 뛰려면 음악 재생 후 또는 재생 중에 버튼을 누르지 만 실패합니다.Android Mediaplayer Selecttrack 메소드가 실패합니다.

현재 코드

mediaplayer.stop(); 
try { 
     mediaplayer.prepareAysn(); 
     mediaPlayer.selectTrack(randomtrack_num - 1); 

    } 
    catch(Exception e){} 
mediaplayer.start(); 

I 나타나는 오류 :

  • MediaPlayer를 : 상태라고 시작 64

  • MediaPlayer를 : 오류 (-38, 0)

  • MediaPlayer : 오류 (-38,0)

mediaplayer.stop()없이이 작업을 시도했지만 끝에 mediaplayer.start()가 포함되어있어 동일한 트랙을 다시 재생할 수 있습니다.

내가 누락 된 항목이 있습니까? 알려 주시기 바랍니다.

나는이 만 나는 그것이 작동해야 내 두 번째 방법에서 가정 준비된 상태에서 수행 할 수 있지만, 그렇지 않은 실현 문서를 읽은 후 두번째 접근 .

mediaPlayer.stop(); 

    mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener(){ 

     @Override 
     public void onPrepared(MediaPlayer mp) { 

      try{ 
       mp.selectTrack(randomtrack_num - 1); 

       }catch(Exception e){} 

      mp.start(); 

     } 
    }); 
    mediaPlayer.prepareAsync(); 

는이 오류를 얻을 :/MediaPlayer를 : 자막 컨트롤러가 있어야 이미 은 기본적으로 같은 트랙이 다시 재생하고 선택한 트랙으로 이동하지 않는 설정합니다.

답변

1

mediaplayer.start()이 잘못된 상태입니다. 먼저이 문서를 읽어

https://developer.android.com/reference/android/media/MediaPlayer.html

당신은 올바른 구현의 좋은 생각이있을 것이다.

EDITED :

String[] url ; // initiliaze your URL array here 
    MediaPlayer myMediaPlayer = new MediaPlayer(); 
    myMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
    try { 
     myMediaPlayer.setDataSource(url[0]); 
     myMediaPlayer.prepareAsync(); // might take long! (for buffering, etc) 
    } catch (IOException e) { 
     Toast.makeText(this, "mp3 not found", Toast.LENGTH_SHORT).show(); 
     e.printStackTrace(); 
    } 

    //mp3 will be started after completion of preparing... 
    myMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 

     @Override 
     public void onPrepared(MediaPlayer player) { 
      player.start(); 
     } 

    }); 

가 완성 후에 서로 다른 트랙을 재생

mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
@Override 
public void onCompletion(MediaPlayer mp) 
{ 

    myMediaPlayer.reset(); 
    /* load the new source */ 
    myMediaPlayer.setDataSource(url[position]);//select the path according to your need 
    /* Prepare the mediaplayer */ 
    myMediaPlayer.prepareAsync(); 

}

+0

I가 mediaplayer.prepareAysnc 추가(); try and catch 필드 안쪽. 그것은 여전히 ​​다른 트랙으로 이동하지 않습니다. "E/MediaPlayer : 자막 컨트롤러가 이미 설정되어 있어야합니다." – akalanta

+0

setOnPreparedListener()를 사용하여 두 번째 시도를했는데이 문제를 해결할 수 없습니다. – akalanta

+0

위 답변에서 .selecttrack() 메서드는 어디에 있습니까? – akalanta