gpt4 book ai didi

java - 来自 MediaPlayer 的回调

转载 作者:行者123 更新时间:2023-11-30 01:16:16 27 4
gpt4 key购买 nike

我有一个 MediaPlayer 和一个音频文件,我需要播放它们,我还有一个包含该音频文件特定秒数的 ArrayList,在播放音频的这几秒,我需要在 ViewPager 中切换页面。如何在这些特定时刻从 MediaPlayer 获得回调?或者你可能会推荐一些其他方法如何做到这一点。

我现在拥有的是方法,我在其中使用 CountDownTimer,它在 ViewPager 中更改页面,但它工作不正常,并且没有考虑音轨可以停止然后恢复的事实。

 public void startPlayingLabels() {

mPlayer = new MediaPlayer();

try {
String mFileName = CameraFragment.mAudioFolder + "/" + ViewActivity.parentName + ".3gp";
mPlayer.setDataSource(mFileName);
mPlayer.prepare();
mPlayer.start();

for (int i=0; i<zeroLabelPosition.size()-1; i++) {

final int finalI = i;
new CountDownTimer(Integer.parseInt(String.valueOf(Integer.parseInt((String) zeroTime.get(finalI + 1)) - Integer.parseInt((String) zeroTime.get(finalI)))), 1000) {
public void onTick(long millisUntilFinished) {
}

public void onFinish() {
mPager.setCurrentItem(Integer.parseInt(String.valueOf(zeroLabelPosition.get(finalI))));
}
}.start();
}
} catch (IOException e1) {
e1.printStackTrace();
}
}

最佳答案

Android madiaplayer 没有任何时间轴更新,这就是为什么你可以自己编写,或者你可以使用类似的东西。

CountDownTimer timer;
int timeStampIterator;
int[] timeStamp = new int[5]; // your own time stamps when view must be switched

void play() {
mPlayer.start();
timer = new CountDownTimer(mPlayer.getDuration() - mPlayer.getCurrentPosition(), 1000) {
@Override
public void onTick(long millisUntilFinished) {
int timeSpends = mPlayer.getDuration() - mPlayer.getCurrentPosition();
if (timeSpends == timeStamp[timeStampIterator]) {
//switchToNExtSlide();
timeStampIterator++;
}
}

@Override
public void onFinish() {

}
}.start();
}

void pause() {
mPlayer.pause();
timer.cancel();
timer = null;
}

void stop() {
mPlayer.stop();
timer.cancel();
timer = null;
timeStampIterator = 0;
}

关于java - 来自 MediaPlayer 的回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37812067/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com