我正在开发Android并且一直在尝试创建一个异步任务,根据一组布尔值按顺序播放音频文件(如果i1为真,则播放i1,然后当i1完成时,如果i2是真的它播放等等)。我的第一次尝试不是崩溃应用程序,但也没有播放音频文件。
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(),活动几乎立即结束,让我相信任务甚至没有开始播放音频文件?
答案 0 :(得分:1)
确保在播放完歌曲时释放MediaPlayer课程,否则您会看到一些奇怪的行为:
mp.release();
答案 1 :(得分:0)
在:: doInBackground(Void ... params){
之外写下以下内容player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
done = true;
}
});