2011-12-29 166 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