Videoview 不在 nougat 24 中显示,但在 android Q 29 中显示和工作

Posted

技术标签:

【中文标题】Videoview 不在 nougat 24 中显示,但在 android Q 29 中显示和工作【英文标题】:Videoview is not displaying in nougat 24 but displaying and working in android Q 29 【发布时间】:2019-09-24 15:01:38 【问题描述】:

我正在处理应用程序。当按钮单击发生时,它会显示带有视频视图的弹出窗口。它显示在 android 29 api 中,但不在 android 24 api 中。下面是它的showvideopopup函数代码。

private void showVideoPopup()
    
        LayoutInflater layoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View customView = layoutInflater.inflate(R.layout.dispensing_intro,null);

        int uiOptions =View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_FULLSCREEN
                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
        customView.setSystemUiVisibility(uiOptions);


//        closePopupBtn = (Button) customView.findViewById(R.id.closeView);

        //instantiate popup window
        dispense_intro_popup = new PopupWindow(customView, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);

        //display the popup window
        dispense_intro_popup.showAtLocation(dispense_intro_view, Gravity.CENTER, 0, 0);

        VideoView video = (VideoView) customView.findViewById(R.id.dispense_intro);
        Uri videoUri = Uri.parse("android.resource://" + getPackageName() + "/raw/"+ R.raw.dispense_intro);
        video.setVideoURI(videoUri);
        video.start();

        video.setOnCompletionListener(this);

    

以下是popup.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_
    android:background="#b3000000"
    android:layout_
    android:id="@+id/dispense_intro_holder"
    android:layout_gravity="center"
    android:gravity="center">


    <VideoView
        android:id="@+id/dispense_intro"
        android:layout_gravity="center"
        android:layout_
        android:layout_  />
</LinearLayout>

【问题讨论】:

2 个问题,1 您是否看到任何错误/堆栈跟踪?还是只是没有显示任何视频?和2 尝试在调用.start() 之前记录视频URI 是什么,看看是否出于某种原因不同。 不,我没有看到任何堆栈跟踪。 我可以记录视频 uri @Silmarilos 可以看看这个 【参考方案1】:

使用DialogFragment() 代替PopupWindow

然后将以下代码添加到片段onCreateView

PopupFragment.java

 public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) 
        View rootView = inflater.inflate(R.layout.popup, container, false);
        setStyle(DialogFragment.STYLE_NO_TITLE, R.style.FullscreenTheme);
        VideoView video = (VideoView) rootView.findViewById(R.id.dispense_intro);
        Uri videoUri = Uri.parse("android.resource://" + getPackageName() + "/raw/"+ R.raw.dispense_intro);
        video.setVideoURI(videoUri);
        video.start();

        video.setOnCompletionListener(this);

        return rootView;


为了使对话框片段全屏使用onDialogCreated的以下代码

public Dialog onCreateDialog(Bundle savedInstanceState) 
        Dialog dialog = super.onCreateDialog(savedInstanceState);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

        dialog.getWindow().getDecorView().setSystemUiVisibility(
                View.SYSTEM_UI_FLAG_IMMERSIVE
                        | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                        // Hide the nav bar and status bar
                        | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_FULLSCREEN);
        return dialog;
    

【讨论】:

以上是关于Videoview 不在 nougat 24 中显示,但在 android Q 29 中显示和工作的主要内容,如果未能解决你的问题,请参考以下文章

GoogleServices API 级别更改早于 Nougat(API 级别 24)

全局加载 Django“静态”模板标签库,而不在每个文件中显式加载它

VideoView 不在 android Q 中播放视频,但在较低的 android 版本中工作正常

仅从 Android 7.0 (Nougat) 开始支持默认接口方法

Nougat 7 不支持 Android 相机裁剪

Android Nougat,Oreo - 如何将长按动作添加到快速切换?