2016-09-15 2 views
0

현재 노래를 반복하는 의 onCompletion 수신기에 다음 코드를 사용하고 있습니다.MediaPlayer의 데이터 소스 설정 메소드에서 IllegalStateException이 발생했습니다.

if (isRepeat) { 
       if (mMediaPlayer.isPlaying()) { 
        mMediaPlayer.stop(); 
        mMediaPlayer.reset(); 
       } 
       try { 
        mMediaPlayer.setDataSource(MainActivity.localTrackList.get(MainActivity.currentOffset).getPath()); 
        mMediaPlayer.prepareAsync(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 

하지만 다음과 같은 오류 메시지를 받고 있어요,

at android.media.MediaPlayer._setDataSource(Native Method) 
09-15 09:05:19.884 12545-12545/ W/System.err:  at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1115) 
09-15 09:05:19.884 12545-12545/ W/System.err:  at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1100) 
09-15 09:05:19.884 12545-12545/ W/System.err:  at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1079) 
09-15 09:05:19.884 12545-12545/ W/System.err:  at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1028) 
나는이 밖으로 정렬 할 수있는 방법을

?

답변

1

MediaPlayer.setDataSource()MediaPlayer의 상태가 Idle 인 경우에만 유용합니다.이 방법을 onCompletion에서 호출하여 android 시스템에서 IllStateException을주었습니다. mMediaPlayer.isPlaying()onCompletion 메서드에서 항상 false를 반환합니다.

사실 다시 setDataSource을 다시 입력 할 필요가 없습니다. MediaPlayer.start()을 호출하면 처음부터 데이터를 재생할 수 있습니다. 반면, 작동 준비

2

MediaPlayer에서 아무 것도 재생하지 않거나 트랙이 끝나면 재설정되지 않습니다. 조건이

try { 
    mMediaPlayer.reset(); 
    mMediaPlayer.setDataSource(MainActivity.localTrackList.get(MainActivity.currentOffset).getPath()); 
    mMediaPlayer.prepareAsync(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

당신은 setDataSource()를 사용하기 전에 reset()를 호출해야하는 경우 당신의 mMediaPlayer.reset(); 밖으로 가져 가라.

미디어가 재생 중이면 상태는 절대적으로 쓰지만 트랙이 끝나면 거짓이됩니다.

+0

prepareAsync 것은 저 작동하지 :

은 (https://developer.android.com/reference/android/media/MediaPlayer.html#StateDiagram 찍은)이 상태도를 참조. 왜 이런 일이 일어 났는지 설명해 주시겠습니까? – Rino

관련 문제