2011-12-29 70 views
0

我正在開發Android,並且一直在嘗試創建一個Async任務,以依賴一組布爾值的順序播放音頻文件(如果i1爲true,則播放i1,然後在播放時i1完成了,如果i2是真的,那麼它就會播放,等等)。我的第一次嘗試不會崩潰應用程序,但也不會播放音頻文件。Android:播放多個音軌

class SessionMusicTask extends AsyncTask<Void, Void, Void>{ 

     @Override 
     protected Void doInBackground(Void... params) { 
      try { 
       while(playing == true){ 
       if(i1 == true && done == true){ 
        done = false; 
        player.setDataSource(i1Loc); 
        player.prepare(); 
        player.start(); 
        player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 

         public void onCompletion(MediaPlayer mp) { 
          done = true; 

         } 
        }); 
       } 
       } 
      } catch (IllegalArgumentException e) { 
       e.printStackTrace(); 
      } catch (IllegalStateException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      super.onPostExecute(result); 
     } 

    } 

這是解決問題的最佳方法嗎?任何想法爲什麼文件沒有播放? 感謝您提前提供任何幫助。

更新: 我只是在onPostExecute()中放了一個finish(),活動幾乎立即結束,導致我相信任務甚至沒有開始播放音頻文件?

回答

1

確保您釋放的MediaPlayer類當一首歌曲播放完畢,否則你可能會看到一些奇怪的行爲:

mp.release(); 
+0

好的建議,問題仍然沒有解決。 – Flynn 2011-12-29 06:01:04

+0

這已被接受......這實際上是否解決了這個問題? – Rob 2012-03-30 12:03:19

0

寫信:: doInBackground以下外(無效... PARAMS){

player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 

          public void onCompletion(MediaPlayer mp) { 
           done = true; 

          } 
         }); 
+0

剛剛嘗試過,音頻仍然不會播放。 – Flynn 2011-12-29 05:57:54