2012-02-01 3 views
8

У меня есть приложение с VideoView для того, чтобы сделать воспроизведение видео на петле я использую onCompletionListner называть setVideoPath() снова, как это:Android VideoView повторение

mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
     @Override 
     public void onPrepared(MediaPlayer arg0) { 
      mVideoView.start(); 

     } 
    }); 


    mVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
     public void onCompletion(MediaPlayer mp) { 
       //I have a log statment here, so I can see that it is making it this far. 
       mp.reset(); // <--- I added this recently to try to fix the problem 
       mVideoView.setVideoPath(file.getAbsolutePath()); 
     } 
    }); 

Эта установка работает хорошо на все устройства, с которыми я столкнулся до сих пор, я никогда не испытывал никаких проблем с этим, не повторяя.

Однако Motorola Xoom, который я тестирую, недавно была обновлена ​​до ICS. Теперь, когда это на ICS, это будет работать некоторое время и зацикливать видео. Но в конце концов (я добавил счетчик и несколько журналов, кажется, что не существует какого-либо шаблона для того, сколько раз он успешно завершает цикл до остановки), он прекратит цикл и просто сядет на фрейм-фрейм первого кадра в фильме.

Кто-нибудь знает, что может привести к тому, что это не будет правильно зацикливаться? ИЛИ кто-нибудь знает о другом способе получения VideoView для правильной петли, которая работает в ICS еще?

+0

Что такое mp на вашем коде? –

+0

@jeraldov 'mp' - объект MediaPlayer, который передается как параметр методу onCompletion(). – FoamyGuy

ответ

10

Если у вас есть только одно видео для воспроизведения, вы можете установитьLooping (true) в своем готовом слушателе.

myVideoView.setOnPreparedListener(new OnPreparedListener() { 

     @Override 
     public void onPrepared(MediaPlayer mp) { 
      // TODO Auto-generated method stub 
      mp.setLooping(true); 

     } 
    }); 

и все готово.

3

До сих пор это:

mp.reset(); 

внутри OnComplete обратного вызова, кажется, чтобы исправить это. Было бы очень интересно, если кто-нибудь сможет объяснить, что с ним происходит.

+1

Вы имеете в виду onCompletion? – Adi