Android编程使WebView支持HTML5 Video全屏播放的解决方法

本文实例讲述了Android编程使WebView支持HTML5 Video全屏播放的解决方法。分享给大家供大家参考,具体如下:

1)需要在AndroidManifest.xml文件中声明需要使用HardwareAccelerate, 可以细化到Activity级别,如果不需要的View可以声明不要用加速,但是需要在代码中做,具体如下:

a. 如果要声明整个应用都要加速:
复制代码 代码如下:<application ... android:hardwareAccelerated ="true">
b. 如果要在Activity中声明,则:
复制代码 代码如下:<activity ... android:hardwareAccelerated="true" >还可以更细化到Window, getWindow.setFlags(
         WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);

c. 如果application或者activity都申明了要硬件加速,但是为了某些原因(比如省电?),一些View不需要硬件加速的话,
复制代码 代码如下:view.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
2)可以说挺奇怪的是,需要在AndroidManifest.xml文件中用上<use-sdk></use-sdk>标签,而且如果是空的还不行,必须写上targetSDK或者minSDK,但是我试验过,不管写版本是多少都没有关系。。。理论上说,Android应该是从3.0( API Level 11)开始可以对2D渲染加速,但是我把targetSDK设置为5都可以使用的,但是这个标签不写还不行。

一般来说,上面的操作做了,就可以使用video标签播放视屏了,如果要支持全屏,还需要做一点操作:

1)给webview一个WebChromeClient对象,这个WebChromeClient对象需要实现onShowCustomView和onHideCustomView方法,下面是一个实现例子:

@Override public void onShowCustomView(View view, CustomViewCallback callback) { if (myCallback != null) { myCallback.onCustomViewHidden(); myCallback = null ; return; } long id = Thread.currentThread().getId(); WrtLog. v("WidgetChromeClient", "rong debug in showCustomView Ex: " + id); ViewGroup parent = (ViewGroup) mWebView.getParent(); String s = parent.getClass().getName(); WrtLog. v("WidgetChromeClient", "rong debug Ex: " + s); parent.removeView( mWebView); parent.addView(view); myView = view; myCallback = callback; chromeClient = this ; } private View myView = null; private CustomViewCallback myCallback = null; public void onHideCustomView() { long id = Thread.currentThread().getId(); WrtLog. v("WidgetChromeClient", "rong debug in hideCustom Ex: " + id); if (myView != null) { if (myCallback != null) { myCallback.onCustomViewHidden(); myCallback = null ; } ViewGroup parent = (ViewGroup) myView.getParent(); parent.removeView( myView); parent.addView( mWebView); myView = null; } }

好吧,这个写法和网上很多写法不一样,网上大部分的例子都是onShowCustomView方法接收到的view是一个VideoView对象,而这里是一个找不到的HTML5VideoFullScreen的VideoSurfaceView子类,而且这个子类还是一个private的子类,在外面根本没有办法访问到,android.jar中也没有HTML5VideoFullScreen这个类。如果想要在application中访问到这个类,那么需要把<android-SDK-path>/platforms/<android-version>/data/layoutlib.jar这个包加到buildpath中,而且从android-14,也就是android4.0以后才这样,也就是说,网上说的那个方法在android3.0时代是可以用的,android4.0以后就不行了,我用的是android4.0.3。

其实不管是什么版本,这个段代码的大概意思就是,在onShowCustomView方法中,将获取到的view放到当前Activity的最上方,在onHideCustomView中,将之前的view隐藏或者删除,将原来被覆盖的webview放回来,并结束播放,否在会报MediaPlayer IllegalStatusException, 而且还是Native method,根本没法调试了。

上面代码是片段,很多朋友看了也不能解决问题,完整实例代码代码点击此处本站下载。

可以下载下来,用eclipse导入工程,把样例视频放到sdcard根部目录下,从系统角度看就是/mnt/sdcard即可。

效果如图:

全屏前:

全屏后:

希望本文所述对大家Android程序设计有所帮助。

时间: 2024-11-17 14:30:38

Android编程使WebView支持HTML5 Video全屏播放的解决方法的相关文章

Android编程使WebView支持HTML5 Video全屏播放的解决方法_Android

本文实例讲述了Android编程使WebView支持HTML5 Video全屏播放的解决方法.分享给大家供大家参考,具体如下: 1)需要在AndroidManifest.xml文件中声明需要使用HardwareAccelerate, 可以细化到Activity级别,如果不需要的View可以声明不要用加速,但是需要在代码中做,具体如下: a. 如果要声明整个应用都要加速: 复制代码 代码如下: <application ... android:hardwareAccelerated ="tr

安卓手机HTML5 video全屏播放实例代码

有的需求是视频自动全屏播放,这一点在iphone上是默认的.但是在android系统上就需要手动点击全屏按钮.现在video标签的全屏API一直在草案阶段,各个浏览器的API也是差异.所幸的是现在大部分的手机浏览器内核都是webkit的.所以可以借助浏览器的全屏API来实现视频的全屏,当然浏览器的全屏API并不局限于video标签.在PC端处理video可以使用一个比较成熟的插件videojs.所以这次代码仅针对移动端.从网上借鉴了一些代码,我自己精简掉了一些移动端用不到的代码.并添加了"全屏后

Win7下游戏全屏问题通用解决方法

  显卡设置问题,推荐2个方法.如果你是n卡直接推荐使用第二种的n卡设置,快捷方便. 一.Windows7下游戏全屏问题通用解决方法(推荐使用): Win键+R键,打开运行窗口,输入regedit 回车,这样就打开了注册表编辑器,然后,定位到以下位置: HKEY_LOCAL_MACHINESYSTEMControlSet001ControlGraphicsDriversConfiguration 在Configuration这上面右键,选择查找,输入Scaling,在右框找到scaling,右键

Win7系统笔记本不能全屏游戏的解决方法

  在Windows7系统下,人们在使用笔记本玩游戏时有时会发现屏幕居中两边有黑条,如何能让游戏全屏显示呢,下面给大家介绍Windows7游戏全屏问题通用解决方法. Win键+R键,打开运行窗口,输入regedit 回车,这样就打开了注册表编辑器,然后,定位到以下位置: HKEY_LOCAL_MACHINESYSTEMControlSet001ControlGraphicsDriversConfiguration 在Configuration这上面右键,选择查找,输入Scaling,在右框找到s

Android 4.0 设置全屏修改的解决方法_Android

最近在做一个平板的应用,底部的BACK HOME 还有电池WIFI的那一条STATUS_BAR设置全屏后怎么也去不掉,查找资料后,发现一个比较好的方法,在此分享 第一种方式(程序代码): 在OnCreate里添加一行语句 复制代码 代码如下: getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);  在setContentView之前哦. 过时的一个方法: 复制代码 代码如下: getW

Android 4.0 设置全屏修改的解决方法

最近在做一个平板的应用,底部的BACK HOME 还有电池WIFI的那一条STATUS_BAR设置全屏后怎么也去不掉,查找资料后,发现一个比较好的方法,在此分享 第一种方式(程序代码): 在OnCreate里添加一行语句 复制代码 代码如下: getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE); 在setContentView之前哦. 过时的一个方法: 复制代码 代码如下: getWi

lightBox 简易的全屏透明遮罩解决方法_javascript技巧

囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧 囧

uc浏览器-Android 在listview中实现视频播放和全屏

问题描述 Android 在listview中实现视频播放和全屏 比如 新的UC浏览器中的视频 网易新闻的视听 效果,这是我能拿出的最大的悬赏 请大神赐教 解决方案 http://download.csdn.net/detail/u012440207/7978157 你可以再做一个activity,传值,在新的activity播放http://jingyan.baidu.com/article/86fae346c8b0013c49121a2a.html 解决方案二: 一般listview展示的都

解决玩游戏不能全屏问题的解决办法

人们在使用笔记本玩游戏时有时会发现屏幕居中两边有黑条,一些台式机的宽屏显示器也经常出现下玩游戏不能全屏的问题,下面给大家介绍游戏不能全屏问题通用解决方法. 一.修改注册表中的显示器的参数设置. Win键+R键,打开运行窗口,输入regedit回车,这样就打开了注册表编辑器,然后,定位到以下位置: HKEY_LOCAL_MACHINESYSTEMControlSet001ControlGraphicsDrivers Configuration在Configuration这上面右键,选择查找,输入S