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 版本中工作正常