首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CallBack来自MediaPlayer

CallBack来自MediaPlayer
EN

Stack Overflow用户
提问于 2016-06-14 12:29:31
回答 2查看 2.2K关注 0票数 0

我有一个MediaPlayer和一个音频文件,我需要播放这些文件,还有一个带有这个音频文件特定秒的ArrayList,在这个秒内,当音频播放时,我需要在ViewPager中切换页面。在这些特定的时刻,如何从CallBack中得到一个MediaPlayer?或者你可能会推荐一些其他的方法来做这件事。

现在我有一种方法,我使用CountDownTimer,它在ViewPager中更改页面,但是它的工作错误,而且它没有考虑到音频轨道可以停止然后恢复这一事实。

代码语言:javascript
复制
 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();
        }
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-15 10:18:41

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

代码语言:javascript
复制
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;
} 
票数 1
EN

Stack Overflow用户

发布于 2016-06-14 13:12:15

您还可以对其使用处理程序,如下所示

代码语言:javascript
复制
Handler handler = new Handler();

       Runnable notification = new Runnable() {
            public void run() {
                startPlayProgressUpdater();// change hear page for view pager, because it call after every 1 second
            }
        };
        handler.postDelayed(notification, 1000);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37812067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档