2014-02-21 1 views
0

5 초의 시간 간격으로 차례대로 오디오를 실행하려고합니다. 그러나 나는 그 일이 실제로 일어나는 것을 보지 않는다. 목록의 세 번째 오디오가 재생되고 다른 오디오는 건너 뜁니다. 이것은 디버깅하는 동안 music3 만 재생되고 다른 것은 재생되지 않음을 의미합니다. 나는 이것을하는 대체 방법을 좋아할 것입니다. 게다가 나는 그처럼 준비 방법을 사용했다. 달리면서 달라도.지연된 android로 재생되는 오디오 변경

for(int j=0;j<3;j++) 
{ 

    if(j==0) 
     { 
     xnp = MediaPlayer.create(this,R.raw.ticktock); 
     new Handler().postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       try { 
       xnp.prepare(); 
       xnp.start(); 
      } catch (IllegalStateException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
     }, 5000); 

     xnp.stop(); 
     } 
    if(j==1) 
     { 
     xnp = MediaPlayer.create(this,R.raw.music2); 
     new Handler().postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       try { 
       xnp.prepare(); 
       xnp.start(); 
      } catch (IllegalStateException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
     }, 5000); 

     xnp.stop(); 
     } 
    else if (j==2) 
     { 
     xnp = MediaPlayer.create(this,R.raw.music3); 
     new Handler().postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        xnp.prepare(); 
        xnp.start(); 
       } catch (IllegalStateException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
      }, 5000); 
     xnp.stop(); 
     intenter(); 
     } 

}  

답변

0

미디어 재생이 메인 스레드에서 수행되지 않기 때문에 현재 구현이 작동하지 않습니다, 그래서 당신은 즉시 3 미디어 리소스를 재생하는, 그래서에만 세번째는 들립니다.

MediaPlayer 객체에서 MediaPlayer#setOnCompletionListener으로 전화하는 것이 좋습니다. 완성 된 청취자에서, 당신은 다음 리소스를 큐에 넣기 위해 핸들러에 postDelayed 할 수 있습니다.

+0

은이 같은 의미 (INT의 J = 0; J <3; J ++) 용 \t \t { \t \t 경우 (j == 0) \t \t \t { \t \t \t xnp = MediaPlayer를. create (this, R.raw.ticktock); \t \t \t xnp.setOnCompletionListener (새 OnCompletionListener() { \t \t \t \t 공공 무효 onCompletion (최종 MediaPlayer를 헌병) { \t \t \t 새로운 핸들러(). postDelayed (새의 Runnable() { \t \t \t \t @ 오버라이드 \t \t \t \t 공개 무효 run() { \t \t \t \t \t \t \t \t \t \t \t xnp.start(); \t \t \t \t \t \t \t \t \t} \t \t \t \t}, 5000); \t \t \t xnp.release(); \t \t \t intenter(); \t \t \t \t \t} \t \t \t}); \t \t \t} – wisejoy

+0

그래도 작동하지 않았습니다! 이번엔 아무 것도 못 들었어! – wisejoy

관련 문제