Android webview全屏播放HTML5中的视频
来源:互联网 发布:中信建投炒股软件 编辑:程序博客网 时间:2024/06/02 22:36
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,根本没法调试了。
上面代码是片段,很多朋友看了也不能解决问题,我上传了个样例工程在 http://download.csdn.net/detail/zrzlj/6348511
可以下载下来,用eclipse导入工程,把样例视频放到sdcard根部目录下,从系统角度看就是/mnt/sdcard即可。
效果如图:
全屏前:
全屏后:
0 0
- Android webview全屏播放HTML5中的视频
- Android webview加载html5网络视频全屏播放
- WebView播放html5视频和全屏。
- webview全屏播放html5的视频
- Android使用WebView全屏播放网页视频
- android webview 播放视频 全屏问题
- android webView 全屏播放网络视频
- Android WebView 总结 —— 使用HTML5播放视频及全屏方案
- Android WebView 总结 —— 硬件加速使用HTML5播放视频及全屏方案
- Android WebView播放视频(包括全屏播放)
- Android WebView播放视频(包括全屏播放),androidwebview
- Android WebView 真正播放视频 全屏 横屏播放
- WebView全屏播放h5视频
- Android用Webview播放优酷视频全屏问题
- android 4.0以上WebView不能全屏播放视频的解决办法
- android 4.0以上WebView不能全屏播放视频的解决办法
- android WebView实现播放网络视频以及全屏显示
- Android中加载WebView的H5全屏视频播放
- ./build/linux/install-arm-sysroot.py
- OpenCV中随机数的相关函数
- django权限设置
- 设计模式学习系列一:设计模式总览
- acm-大菲波数
- Android webview全屏播放HTML5中的视频
- 消除SDK更新时的“https://dl-ssl.google.com refused”异常
- ContentSolver.query 的用法和参数意思
- 图的学习
- ofstream和ifstream详细用法
- windows重装后重新引导Ubuntu
- java 写txt文件 写好之前是.tmp 写好之后变成.txt
- 分享java的Serializable功能
- MyBatis简介