2010-12-15 5 views
0

도움이 필요할 수 있습니다. 여기에 문제가 있으며 지금까지 내가 한 일이 있습니다.활동을 동결하지 않고 PCM AudioTrack을 재생하기 위해 AsyncTask를 사용하십시오.

문제 :

은 내가 이전에 기록 된 PCM 파일을 재생합니다. 이 파일은 더 커질 수 있으므로 audiotrack을 사용하여이 파일을 재생합니다. 이것은 꽤 잘 작동합니다. 하지만 나는 그 활동이 멈추길 원치 않는다. 난 이미 스레드를 시도하고 그래서, 지금은 asynctask에서 일하고 있지만 활동은 여전히 ​​응답하지 않습니다.

이 내가 무엇을 가지고 있습니다 : UI가 활동

, 난 새로운 waveplayer 객체를 생성하고 실행 해보십시오.

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 


    /** 
    * Handles ShortClicks for ListView 
    */ 
    OnItemClickListener itemlistener = new OnItemClickListener(){ 

     MediaPlayer mp=null; 
     String currentlyplaying = null; 

     @Override 
     public void onItemClick(AdapterView<?> adaptview, View clickedview, int position, 
       long id) { 

      String pathtofile = (String) adaptview.getItemAtPosition(position); 
      if(pathtofile.contains(".wav")) 
      { 
       //HQ! 
       if(mp==null) 
       { 
        clickedview.setSelected(true); 
        try 
        { 

         WavePlayer t = null; 
         //TODO: //add thread waveplayer to play file! 
         try { 
          t = new WavePlayer(pathtofile); 
          t.execute((Void)null); 
         } catch (Exception e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } 

         clickedview.postDelayed(new Deselector(clickedview, t), 1000); 

         currentlyplaying = pathtofile; 


        } catch (IllegalArgumentException e) { 
         e.printStackTrace(); 
        } catch (IllegalStateException e) { 
         e.printStackTrace(); 
        } 
       } 
       else 
       { 

       } 

      } 
      else{ 
       //NO HQ 
       //you dont need to know that :) 


      } 


     } 
    }; 

클래스 deselector : 관련된 재생이 좋은 작품

/** 
* This Runnable tries to deselect the view after playing the audio file. 
* @author quant 
* 
*/ 
class Deselector implements Runnable 
{ 
    View view = null; 
    AsyncTask thread; 

    Deselector(View view, AsyncTask t) 
    { 
     this.view = view ; 
     this.thread = t; 
    } 

    @Override 
    public void run() { 
     // TODO Auto-generated method stub 
     try { 
      view.setSelected(false); 
      thread.cancel(true); 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 

} 

모든 것이, 내가 내 목소리 자체가 잘 작동 재생을들을 수있다 ...하지만 여전히 주요 활동의 GUI가 동결 않습니다는 /입니다 응답 없음.

누군가가 도움을 주길 바랍니다. 미리

마르쿠스

+0

편집 해 주셔서 대단히 감사합니다. 코드 태그가 제게 너무 좋아 보이지 않습니다. ( – mad

+0

이클립스, Ctrl + i, 및 뒤로 복사 됨 : ') –

+0

원래 이식에서 왔습니다. : D – mad

답변

0

덕분 나 원격 서비스를 사용하여 해결. 나는 다른 목적을 위해 아직 하나를 실행했기 때문에이 솔루션에 만족합니다. 이제 인터페이스가 다시 반응합니다.

관련 문제