我现在面临的问题是我的停顿并不总是有效。 我所拥有的是主要活动中的MediaPlayer,它通过ActionBarSherlock和onClick侦听器进行操作。 MediaPlayer正在使用带有MP3文件URL的ArrayList(其中一些长1秒)。
暂停代码:
if (player.isPlaying()) {
if (player != null) {
player.pause();
swapPlayIcon(1);
isPaused = true;
pauseMenuButt.setVisible(false);
playMenuButt.setVisible(true);
}
}
swapPlayIcon(int)仅处理可见性和可绘制交换。
开始代码:
Iterator<Uri> iterUri = tracks.iterator();
while (iterUri.hasNext()) {
Uri tmpUri = iterUri.next();
try {
player.reset();
player.setDataSource(String.valueOf(tmpUri));
player.prepare();
player.start();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
修改
经过更多测试后,我发现问题出现在“介于两者之间”状态。
我的意思是当我的MP3文件长2秒时,我点击暂停它不停止因为它刚刚结束读取一个文件然后转移到下一个文件。
我已添加:
} else {
pauseLocked = true;
}
暂停,如果声明,并且在测试时它根本没有落入其中。 所以我不确定我之前发现的“中间”问题。
答案 0 :(得分:1)
您的暂停按钮无法正常工作,因为在您启动最后一个网址之前,其消息无法到达MediaPlayer。你完全阻止你的MediaPlayer运行的线程(我假设它是UI线程,因为MediaPlayer在你的主要活动中)。如果您在与UI相同的线程上创建MediaPlayer,则应使用prepare:prepareAsync的异步版本。收到onMediaPrepared回调后,您需要回复,然后启动媒体。一旦发生这种情况,你必须什么都不做,等待媒体完成,然后才能加载另一个网址。