如何不陌路 2016-12-08 10:53 采纳率: 100%
浏览 2737
已结题

setOnCompletion方法为什么有时候会执行两次,有时候一次都不执行?

class OnCompletionListener implements android.media.MediaPlayer.OnCompletionListener {

    @Override
    public void onCompletion(MediaPlayer mp) {
        Log.i("mp3", "服务执行了OnCompletionListener方法");
            statethreadFlag = true;
            mp.stop();
            if (currIndex >= (list.size() - 1)) {
                Toast.makeText(getApplicationContext(), "歌曲全部播放完毕", Toast.LENGTH_LONG).show();
            } else {
                currIndex++;
                start();
            }
    }
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    // TODO Auto-generated method stub
    Log.i("mp3", "服务执行了onstartcommand方法");
    player = new MediaPlayer();
    bundle = intent.getBundleExtra("sendListToService");
    list = (ArrayList<HashMap<String, String>>) bundle.getSerializable("arraylist");
    currIndex = bundle.getInt("currIndex");
    start();
    player.setOnCompletionListener(new OnCompletionListener());
    return super.onStartCommand(intent, flags, startId);
}
public void start() {
    Log.i("mp3", "服务执行了start方法,开始播放歌曲");
    if (bundle.getBoolean("flag")) {
        hMap = list.get(currIndex);
        player.reset();
        try {
            player.setDataSource(hMap.get("path"));
            player.prepare();

// Log.i("mp3", "播放器准备完毕");
} catch (Exception e) {
e.printStackTrace();
}
player.start();
serviceFlag = 1;
statethreadFlag = false;

        new Thread(new StateThread()) {
        }.start();
    } else {
    }
}
播放器是写在服务中的,想让播放器在放完一首歌后自动播放下一曲,可是有时候会重复一首或者跳一首和两首歌。找了半天也不知道哪里出了问题。
  • 写回答

1条回答 默认 最新

  • dabocaiqq 2016-12-10 15:29
    关注
    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!