Видео не воспроизводится с того же времени при изменении ориентации экрана

Мне очень нравится этот сайт, потому что я могу найти много полезных решений, которые мне очень помогают, особенно я новичок в программировании для Android, и это мой первый вопрос, поэтому я надеюсь найти помощь в этом замечательном сообществе.

Проблема: я воспроизводю видео в своем приложении и заставляю его воспроизводиться в полноэкранном режиме в альбомной ориентации, когда экран ориентирован на пользователя, поэтому я хочу перезапустить воспроизведение видео с той же точки с помощью seekTo() и getCurrentPosition() - но проблема в том, что видео воспроизводится через много секунд после позиции я имею в виду, что видео стремится к тому же моменту времени, но когда начинается воспроизведение, оно добавляет много секунд.

Мой код:

    //initialise everything  
protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        v = (VideoView) findViewById(R.id.videoView1);
                v.setVideoPath(dir + videoName + ".3gp");
                v.setMediaController(new MediaController(this));
                if (savedInstanceState == null){
                    v.start();  
                }
                else {
                    playingTime = savedInstanceState.getInt("restartTime", 0);
                    v.seekTo(playingTime);
                }
       }

@Override
protected void onSaveInstanceState(Bundle outState) {
    // TODO Auto-generated method stub
    super.onSaveInstanceState(outState);
    if (file.exists()){
        playingTime = v.getCurrentPosition();
        v.stopPlayback();
        outState.putInt("restartTime", playingTime);
    }
}

Я пробую много решений, таких как это воспроизведение видео при переходе в ландшафтный режим Android

Я использую Galaxy Nexus для тестирования своего приложения. Буду признателен за любую подсказку. Извините за мой плохой английский и большое спасибо.


person Mohamed ElSawaf    schedule 22.09.2012    source источник


Ответы (1)


В своей деятельности держите все в норме. Это сводится к сохранению позиции при воссоздании активности. Вот один из подходов:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //initialise everything


    //finally
    if(savedInstanceState!=null) {
        int seekValue = savedInstanceState.getInt("where");
        //now seekTo(seekValue)
    }
}
@Override
    protected void onSaveInstanceState(Bundle outState) {
        int seekValue; //set this to the current position;
        outState.putInt("where", seekValue);
        super.onSaveInstanceState(outState);
    }
}
person Sherif elKhatib    schedule 22.09.2012
comment
Разве вы не назвали бы super.onSaveInstanceState(outState) последним в своем методе Activity onSaveInstanceState(...)? Другими словами, ПОСЛЕ вызова outState.PutInt(...). - person Squonk; 22.09.2012
comment
@Squonk имеет смысл с семантической точки зрения, но на самом деле это не имеет значения, поскольку вы помещаете свои данные в один и тот же экземпляр outState, а реализация super еще не требует конечного состояния outState. Но я бы предпочел поставить его на первое место, так как он не зависит от супер-реализации. Хотя можно утверждать, что super может потребоваться настроить outState, прежде чем вы сможете поместить в него что-то, и в этом случае было бы безопаснее поместить ваши данные после super. - person zapl; 22.09.2012
comment
Ну, я предпочитаю называть super в конце, чтобы не записывать состояния вашей активности. Однако я написал это только для демонстрации; все равно двигать. - person Sherif elKhatib; 22.09.2012
comment
@zapl: Хорошо, согласен - это просто семантическая точка. Взглянув на исходный код Activity, не похоже, что в любом случае это будет иметь значение. Я думаю, что я просто называю реализацию super последней в своем собственном коде, потому что это делает «поток» более логичным для меня. - person Squonk; 22.09.2012
comment
@SherifelKhatib Большое спасибо, мистер Шериф, но я действительно сделал это. Пожалуйста, проверьте мой код выше. - person Mohamed ElSawaf; 23.09.2012
comment
Может кто-нибудь помочь мне? Возможна ли эта проблема с моего устройства Galaxy Nexus? - person Mohamed ElSawaf; 25.09.2012