java - rotate - Cómo seguir reproduciendo el video mientras cambias al modo horizontal android
porque no gira la pantalla de mi celular (3)
A menos que especifique lo contrario, un cambio de configuración (como un cambio en la orientación de la pantalla, el idioma, los dispositivos de entrada, etc.) causará la destrucción de su actividad actual, pasando por el proceso de ciclo de vida de la actividad normal de onPause (), onStop () y onDestroy () según corresponda. Si la actividad ha estado en primer plano o es visible para el usuario, una vez que se llama a OnDestroy () en esa instancia, se creará una nueva instancia de la actividad, con el estado guardado en la instancia anterior que la instancia anterior haya generado desde onSaveInstanceState (Bundle).
Entonces, lo que sucedió detrás de la escena: la actividad de VideoView de currnet (paisaje) se destruye, se crea una nueva Actividad de VideoView (retrato) debido a que se cambió la configuración de Orientación de la pantalla, y se destruyó inmediatamente (donde se pueden ver los efectos en la pantalla), la última actividad en la pila se muestra.
Intenta manejar estos métodos y comprueba.
@Override
protected void onResume() {
mVideoView.resume();
super.onResume();
}
@Override
protected void onPause() {
mVideoView.suspend();
super.onPause();
}
@Override
protected void onDestroy() {
mVideoView.stopPlayback();
super.onDestroy();
}
Estoy reproduciendo video (en VideoView
) en modo retrato (no en pantalla completa) y cuando cambio a
Modo paisaje el vídeo se detiene.
Cuando lo cambie a horizontal, ese video aparecerá en pantalla completa y seguirá reproduciéndose.
¿Cualquier sugerencia?
todo lo que necesita hacer es agregar esto a la actividad en AndroidManifest.xml:
android:configChanges="orientation"
Su actividad de video debe verse algo como esto.
<activity android:name=".VideoPlayerActivity"
android:configChanges="orientation" />
Si su nivel de API objetivo 13 o superior, debe incluir el valor de screenSize
además del valor de orientation
como se describe here . Su actividad de video debe verse algo como esto.
<activity android:name=".VideoPlayerActivity"
android:configChanges="orientation|screenSize" />
Y luego agregue el siguiente método a VideoPlayerActivity:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
Vídeo en pantalla completa
AndroidManifext.xml (Configuración de la orientación)
<activity
android:name=".Video1"
android:screenOrientation="landscape" />
Video1.xml Código:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Video1">
<VideoView
android:id="@+id/videoView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent">
</VideoView>
Video1.java Código:
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.WindowManager;
import android.widget.MediaController;
import android.widget.VideoView;
public class Video1 extends AppCompatActivity {
private VideoView videoView;
private MediaController mediaController;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_video1);
videoView = findViewById(R.id.videoView);
String fullScreen = getIntent().getStringExtra("fullScreenInd");
if("y".equals(fullScreen)){
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
getSupportActionBar().hide();
}
Uri videoUri = Uri.parse("android.resource://"+getPackageName()+"/"+R.raw.YOUR_VIDEO_NAME);
videoView.setVideoURI(videoUri);
mediaController = new FullScreenMediaController(this);
mediaController.setAnchorView(videoView);
videoView.setMediaController(mediaController);
videoView.start();
}
}
Código FullScreenMediaControler.java:
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.view.Gravity;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.MediaController;
public class FullScreenMediaController extends MediaController {
private ImageButton fullScreen;
private String isFullScreen;
public FullScreenMediaController(Context context) {
super(context);
}
@Override
public void setAnchorView(View view) {
super.setAnchorView(view);
//image button for full screen to be added to media controller
fullScreen = new ImageButton (super.getContext());
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
params.gravity = Gravity.RIGHT;
params.rightMargin = 80;
addView(fullScreen, params);
//fullscreen indicator from intent
isFullScreen = ((Activity)getContext()).getIntent().
getStringExtra("fullScreenInd");
if("y".equals(isFullScreen)){
fullScreen.setImageResource(R.drawable.ic_fullscreen_exit);
}else{
fullScreen.setImageResource(R.drawable.ic_fullscreen);
}
//add listener to image button to handle full screen and exit full screen events
fullScreen.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getContext(),Video1.class);
if("y".equals(isFullScreen)){
intent.putExtra("fullScreenInd", "");
}else{
intent.putExtra("fullScreenInd", "y");
}
((Activity)getContext()).startActivity(intent);
}
});
}
}