2015-11-11 4 views
1

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

public class MainActivity extends Activity { 
    VideoView videoView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     videoView = (VideoView) findViewById(R.id.vid); 
     String vidAddress = "http://campusvibe.co.nf/blender.mp4"; 
     Uri vidUri = Uri.parse(vidAddress); 

     MediaController vidControl = new MediaController(this); 
     vidControl.setAnchorView(videoView); 
     videoView.setMediaController(vidControl); 
     videoView.setVideoURI(vidUri); 
     videoView.start(); 


    } 
} 

Это для портретного режима

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#3090C7"> 


     <VideoView 
      android:id="@+id/vid" 
      android:layout_width="fill_parent" 
      android:layout_height="200dp" 
      android:layout_gravity="center"> 
</VideoView> 
    </RelativeLayout> 

Это для ландшафтного режима

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#3090C7"> 

    <VideoView 
     android:id="@+id/vid" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_gravity="center"></VideoView> 
</RelativeLayout> 

ответ

1

Добавьте эту строку в вашу деятельность, в которой видео играется в AndroidManifest. xml файл

android: configChanges = "orientation" Th предотвращает воссоздание активности. Надеюсь это поможет!

+0

Воспроизведение видео снова начинается. после вставки этого. – Alex

+0

Атрибут 'configChanges' может открыть банку червей, хотя и должен быть только последним, поскольку все, что связано с изменениями конфигурации, теперь должно обрабатываться вручную. Подробнее [здесь] (http://stackoverflow.com/questions/5335665/avoid-reloading-activity-with-asynctask-on-orientation-change-in-android/5336057) и [здесь] (http: // www .androiddesignpatterns.com/2013/04/keeping-objects-поперек-config-changes.html) – PPartisan

0

Я считаю, что вы могли бы использовать это:

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
    super.onSaveInstanceState(savedInstanceState); 
    // Save UI state changes to the savedInstanceState. 
    // This bundle will be passed to onCreate if the process is 
    // killed and restarted. 
    savedInstanceState.putInt("movLength", mediaplayer.getCurrentPosition()); 
    // value equals to where user watched the 
    // etc. 
} 

и на чеке деятельности, если Bundle savedInstanceState = нуль:

int movlength = 0;  
    if (savedInstanceState != null){ 
    movlength = savedInstanceState.getInt("movLength"); 
    } 
    mediaplayer.seekto(movlength); 
    // etc 

Копия выше в onCreate method

0

По умолчанию каждый раз, когда вы меняете ориентацию, вид i снова воссоздан. для предотвращения этого вы можете использовать android:configChanges="orientation, но предпочтительно сохранить состояние, как при изменении ориентации.

По мере того, как ваша деятельность начинает останавливаться, система вызывает onSaveInstanceState(), поэтому ваша деятельность может сохранять информацию о состоянии с набором пар ключ-значение. Реализация этого метода по умолчанию сохраняет информацию о состоянии иерархии представлений активности, например, текст в виджетах EditText или позиции прокрутки ListView.

Чтобы сохранить дополнительную информацию о состоянии вашей деятельности, такую ​​как положение потокового видео, вы должны реализовать onSaveInstanceState() и добавить пары ключ-значение в объект Bundle. Например:

... 

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
// Save the current streaming position or state 
     percentage = controls.getBufferPercentage() 
     position = controls.getCurrentPosition() 
savedInstanceState.putInt("percentage", percentage); 
savedInstanceState.putInt("position", position); 

// Always call the superclass so it can save the view hierarchy state 
super.onSaveInstanceState(savedInstanceState); 
} 

реализации onRestoreInstanceState, это называется при повторном создании.

public void onRestoreInstanceState(Bundle savedInstanceState) { 
// Always call the superclass so it can restore the view hierarchy 
super.onRestoreInstanceState(savedInstanceState); 

// Restore state members from saved instance 
mCurrentPosition = savedInstanceState.getInt("position"); 
mCurrentPercentage = savedInstanceState.getInt("percentage"); 

// then you can use the MediaControls to restore the streaming app to the current position 
} 
Смежные вопросы