Видеообзор AndroidTV воспроизводит звук, но видео отсутствует, когда я меняю ориентацию на портретную

#java #android #video #streaming #android-tv

Вопрос:

У меня есть приложение для AndroidTV, которое воспроизводит такие медиа, как изображения и видео, пользователь выбирает нужную ориентацию, видео отлично работает, когда оно в альбомной ориентации, но при переходе на портретную только воспроизводит звук, но видео в видеообзоре отсутствует.

Мой XML-файл выглядит следующим образом:

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@ id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/black">

<VideoView
    android:id="@ id/videoView"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

<android.support.constraint.Guideline
    android:id="@ id/guidelinev"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    app:layout_constraintGuide_percent="0.5" />

<ImageView
    android:id="@ id/imageView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_alignParentStart="true"
    android:layout_alignParentTop="true"
    android:layout_alignParentEnd="true"
    android:background="@android:color/black"
    android:scaleType="fitCenter" />
 

Метод onCreate, в котором инициализируется просмотр видео и распознается ориентация, выглядит следующим образом:

  @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    SharedPreferences PREFERENCES = getApplicationContext().getSharedPreferences(SHARED_PREFERENTS_FILE, Context.MODE_PRIVATE);
    boolean isVertical = PREFERENCES.getBoolean(KEY_STATUS, false);


    ShowMediaActivity.IS_RUNNING = true;

    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

    int UI_OPTIONS = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
    getWindow().getDecorView().setSystemUiVisibility(UI_OPTIONS);
    setContentView(R.layout.activity_show_media);
    RelativeLayout mParentLayout = (RelativeLayout) findViewById(R.id.container);

    View decorView = getWindow().getDecorView();
    decorView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {
        @Override
        public void onSystemUiVisibilityChange(int visibility) {
            if (visibility == View.VISIBLE) {
                hideSystemUi();
            }
        }
    });

    videoView = findViewById(R.id.videoView);
    videoView.setBackgroundColor(Color.TRANSPARENT);
    imageView = findViewById(R.id.imageView);

    if (isVertical) { // SCREEN ROTATE
        // get screen size from DisplayMetrics if you need to rotate before the screen is shown
        DisplayMetrics displayMetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
        int height = displayMetrics.heightPixels;
        int width = displayMetrics.widthPixels;
        // if you are rotating after the view was shown
        // acquire width and height from the layout's parent's LayoutParams
        // calculate offset to move the view into correct position
        int offset = (width - height) / 2;
        // rotate the layout
        FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(height, width);
        mParentLayout.setLayoutParams(lp);
        // 90° clockwise
        mParentLayout.setRotation(-90.0f);
        mParentLayout.setTranslationX(offset);
        mParentLayout.setTranslationY(-offset);
    }
 

And finally the video starts with this method:

 private void showVideo(Elementos elemento) {
    imageView.setVisibility(View.GONE);
    webView.setVisibility(View.GONE);
    stopWeb.setVisibility(View.GONE);
    videoView.setVisibility(View.VISIBLE);

    try {
        File getFile = new File(getExternalFilesDir(null).getAbsolutePath()   "/NETCARTV_APP/"   elemento.getNombreArchivo());
        String filename = getFile.getAbsoluteFile().toString();
        //String filename = Environment.getExternalStorageDirectory()   "/"   "NETCARTV_APP"   "/"   elemento.getNombreArchivo();

        //videoView.setVideoPath(filename);
        //videoViewCustom.setVideoPath(filename);
        videoView.setVideoURI(Uri.fromFile(getFile));
        //videoView.setVideoPath("android.resource://"   getPackageName()   "/"   R.raw.comercial);
        videoView.setMediaController(new MediaController(this));
        videoView.requestFocus();

        //------** Elimina la barra de reproducción de videos
        MediaController ctrl = new MediaController(ShowMediaActivity.this);
        ctrl.setVisibility(View.GONE);
        videoView.setMediaController(ctrl);

        videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            //Cuando termina
            @Override
            public void onCompletion(MediaPlayer mediaPlayer) {
                System.gc();
                goToNextMedia();
            }
        });
        videoView.setZOrderMediaOverlay(true);
        videoView.start();
        videoView.setZOrderOnTop(true);


        File imgFile = new File(filename);
        if (imgFile.exists()) {
            Log.w(TAG, "EEEE");
        } else {
            ErrorCase();
        }
    } catch (Exception e) {
        ErrorCase();
        e.printStackTrace();
    }
}
 

I tried all the solutions that I find here but no one it’s working.
I tried with:

  • videoView.setBackgroundColor(Color.TRANSPARENT);
  • videoView.setZOrderMediaOverlay(true); videoView.setZOrderOnTop(true);
  • Also tried with VideoViewCustom extends class but neither works.

Any suggestion to fix this problem (?)
Thank you.