菜鸟学android——webview播放网络视频,由竖屏转换为横屏全屏播放

本文主要是介绍菜鸟学android——webview播放网络视频,由竖屏转换为横屏全屏播放,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

近来做一个应用,遇到了这样的问题,介绍一下场景吧:

从论坛上抓取了帖子的内容,放到webview中显示。其中可能包含网络视频。视频控件采用的是<embed  />标签。

如何达到标题介绍的效果呢?我们一步步来看:

1、设置webview属性:

WebSettings setting = wv.getSettings();
setting.setJavaScriptEnabled(true);
setting.setPluginState(PluginState.ON);

这样就可以播放了。但是有的网络视频自带全屏按钮,这是就要进行相应的设置,否则点击后会崩溃。

2、设置WebChromeClient:

class MyWebChromeClient extends WebChromeClient {private CustomViewCallback customViewCallback;private int mOriginalOrientation = 1;@Overridepublic void onShowCustomView(View view, CustomViewCallback callback) {onShowCustomView(view, mOriginalOrientation, callback);super.onShowCustomView(view, callback);}public void onShowCustomView(View view, int requestedOrientation,WebChromeClient.CustomViewCallback callback) {if (customView != null) {callback.onCustomViewHidden();return;}customView = view;customViewCallback = callback;mOriginalOrientation = getRequestedOrientation();ll_content.setVisibility(View.GONE);fl_video.addView(customView);fl_video.setVisibility(View.VISIBLE);fl_video.bringToFront();//设置横屏setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//设置全屏getParent().getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);}public void onHideCustomView() {ll_content.setVisibility(View.VISIBLE);if (customView == null) {return;}fl_video.removeView(customView);customView = null;fl_video.setVisibility(View.GONE);try {customViewCallback.onCustomViewHidden();} catch (Exception e) {}// 设置竖屏setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);// 取消全屏final WindowManager.LayoutParams attrs = getParent().getWindow().getAttributes();attrs.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN);getParent().getWindow().setAttributes(attrs);getParent().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);}
}

customVuew 是一个View对象。

此处需要注意的是我当前的Activity是一个ActivityGroup的子Activity,所以需要getParent().getWindow()……,如果是单独的Activity,则去掉getParent()。奇怪的是如果不设置全屏的话不能正常播放。

布局文件:

<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#888888"><FrameLayoutandroid:id="@+id/fl_video"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#ffffff"android:visibility="gone" /><LinearLayoutandroid:id="@+id/ll_content"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#00000000"android:orientation="vertical" ><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="match_parent" ><WebViewandroid:id="@+id/wv"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_centerInParent="true" /></RelativeLayout></LinearLayout>
</FrameLayout>
3、针对横竖屏转换所造成的配置更改进行如下设置:

在AndroidManifest.xml文件中对当前Activity及ActivityGroup进行设置

android:configChanges="orientation|keyboardHidden|navigation|screenSize"

该语句使得横竖屏转换不会进行配置更改。

这样就达到了标题所示的目的。。。

刚刚整理了一个Demo,需要下载的朋友可以看看:

http://download.csdn.net/detail/sollian/7646425

这篇关于菜鸟学android——webview播放网络视频,由竖屏转换为横屏全屏播放的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/622923

相关文章

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

poj 3181 网络流,建图。

题意: 农夫约翰为他的牛准备了F种食物和D种饮料。 每头牛都有各自喜欢的食物和饮料,而每种食物和饮料都只能分配给一头牛。 问最多能有多少头牛可以同时得到喜欢的食物和饮料。 解析: 由于要同时得到喜欢的食物和饮料,所以网络流建图的时候要把牛拆点了。 如下建图: s -> 食物 -> 牛1 -> 牛2 -> 饮料 -> t 所以分配一下点: s  =  0, 牛1= 1~

poj 3068 有流量限制的最小费用网络流

题意: m条有向边连接了n个仓库,每条边都有一定费用。 将两种危险品从0运到n-1,除了起点和终点外,危险品不能放在一起,也不能走相同的路径。 求最小的费用是多少。 解析: 抽象出一个源点s一个汇点t,源点与0相连,费用为0,容量为2。 汇点与n - 1相连,费用为0,容量为2。 每条边之间也相连,费用为每条边的费用,容量为1。 建图完毕之后,求一条流量为2的最小费用流就行了

poj 2112 网络流+二分

题意: k台挤奶机,c头牛,每台挤奶机可以挤m头牛。 现在给出每只牛到挤奶机的距离矩阵,求最小化牛的最大路程。 解析: 最大值最小化,最小值最大化,用二分来做。 先求出两点之间的最短距离。 然后二分匹配牛到挤奶机的最大路程,匹配中的判断是在这个最大路程下,是否牛的数量达到c只。 如何求牛的数量呢,用网络流来做。 从源点到牛引一条容量为1的边,然后挤奶机到汇点引一条容量为m的边

android-opencv-jni

//------------------start opencv--------------------@Override public void onResume(){ super.onResume(); //通过OpenCV引擎服务加载并初始化OpenCV类库,所谓OpenCV引擎服务即是 //OpenCV_2.4.3.2_Manager_2.4_*.apk程序包,存