菜鸟学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

相关文章

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

Android ClassLoader加载机制详解

《AndroidClassLoader加载机制详解》Android的ClassLoader负责加载.dex文件,基于双亲委派模型,支持热修复和插件化,需注意类冲突、内存泄漏和兼容性问题,本文给大家介... 目录一、ClassLoader概述1.1 类加载的基本概念1.2 android与Java Class

Python使用OpenCV实现获取视频时长的小工具

《Python使用OpenCV实现获取视频时长的小工具》在处理视频数据时,获取视频的时长是一项常见且基础的需求,本文将详细介绍如何使用Python和OpenCV获取视频时长,并对每一行代码进行深入解析... 目录一、代码实现二、代码解析1. 导入 OpenCV 库2. 定义获取视频时长的函数3. 打开视频文

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

利用Python脚本实现批量将图片转换为WebP格式

《利用Python脚本实现批量将图片转换为WebP格式》Python语言的简洁语法和库支持使其成为图像处理的理想选择,本文将介绍如何利用Python实现批量将图片转换为WebP格式的脚本,WebP作为... 目录简介1. python在图像处理中的应用2. WebP格式的原理和优势2.1 WebP格式与传统

Python如何将OpenCV摄像头视频流通过浏览器播放

《Python如何将OpenCV摄像头视频流通过浏览器播放》:本文主要介绍Python如何将OpenCV摄像头视频流通过浏览器播放的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完... 目录方法1:使用Flask + MJPEG流实现代码使用方法优点缺点方法2:使用WebSocket传输视

Android DataBinding 与 MVVM使用详解

《AndroidDataBinding与MVVM使用详解》本文介绍AndroidDataBinding库,其通过绑定UI组件与数据源实现自动更新,支持双向绑定和逻辑运算,减少模板代码,结合MV... 目录一、DataBinding 核心概念二、配置与基础使用1. 启用 DataBinding 2. 基础布局

Android ViewBinding使用流程

《AndroidViewBinding使用流程》AndroidViewBinding是Jetpack组件,替代findViewById,提供类型安全、空安全和编译时检查,代码简洁且性能优化,相比Da... 目录一、核心概念二、ViewBinding优点三、使用流程1. 启用 ViewBinding (模块级

java Long 与long之间的转换流程

《javaLong与long之间的转换流程》Long类提供了一些方法,用于在long和其他数据类型(如String)之间进行转换,本文将详细介绍如何在Java中实现Long和long之间的转换,感... 目录概述流程步骤1:将long转换为Long对象步骤2:将Longhttp://www.cppcns.c