Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从MediaPlayer回调_Java_Android_Callback_Media Player - Fatal编程技术网

Java 从MediaPlayer回调

Java 从MediaPlayer回调,java,android,callback,media-player,Java,Android,Callback,Media Player,我有一个MediaPlayer和一个音频文件,我需要播放它,我还有一个ArrayList,其中包含这个音频文件的特定秒数,在播放音频的这几秒钟内,我需要在ViewPager中切换页面。在这些特定时刻,如何从MediaPlayer获得回调?或者你会推荐一些其他的方法,如何做到这一点 我现在有一种方法,我使用倒计时,它可以在ViewPager中更改页面,但它工作错误,并且没有考虑到音频曲目可以停止然后恢复这一事实 public void startPlayingLabels() {

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

我现在有一种方法,我使用倒计时,它可以在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();
        }
    }
public void startPlayingLabels(){
mPlayer=新媒体播放器();
试一试{
字符串mFileName=CameraFragment.mAudioFolder+“/”+ViewActivity.parentName+“.3gp”;
mPlayer.setDataSource(mFileName);
mPlayer.prepare();
mPlayer.start();

对于(inti=0;i,您也可以像下面这样使用处理程序

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);

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;
} 

请添加更多代码