Android的webview加载H5网络视频时黑屏(只有声音,没有画面)的解决办法大全!

直接进入正题,保你在WebView打开H5的视频不黑屏!

1. 开启GPU渲染,分为几个级别:
1) Application级
AndroidManifest.xml 中
把以下属性添加到标签来对整个应用启用硬加速:

<application
android:hardwareAccelerated="true" ...

2) Activity级

<activity
android:hardwareAccelerated="true" ...

 

也可以全局加速,某个具体的Activity不加速
3) Window级
如果需要更高颗粒度的控制,可以使用以下代码为一个window启用硬加速:
OnCreate中添加:

getWindow().setFlags(
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);

 

建议颗粒度控制在Windows级别,因为对于GPU渲染,不同手机,不同应用表现不一样,甚至导致应用变卡。

2. WebView设置 android:layerType=”hardware”

3. 因为Android 4.0之后才有了强制GPU渲染,让opengl来处理图形图像。因此Manifest.xml文件里的users-sdk 一定要配置正确
android:targetSdkVersion=”14″ 及以上
一般到这一步就搞定了。

4. Android5.0 WebView中Http和Https混合的问题,需要在WebView中做处理:

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
getSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}

 

原因:从Android5.0开始,WebView默认不支持同时加载Https和Http混合模式。

5. WebView硬件加速导致页面渲染闪烁
Android4.0以上的系统我们开启硬件加速后,WebView渲染页面更加快速,拖动也更加顺滑。但有个副作用就是,当WebView视图被整体遮住一块,然后突然恢复时(比如使用SlideMenu将WebView从侧边滑出来时),这个过渡期会出现白块同时界面闪烁。解决这个问题的方法是在过渡期前将WebView的硬件加速临时关闭,过渡期后再开启,代码如下:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
webview.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}

 

参考资料:
http://blog.csdn.net/qq_16472137/article/details/54346078
https://www.cnblogs.com/qianyukun/p/4792533.
http://blog.csdn.net/xxxiu/article/details/31381649
http://bbs.csdn.net/topics/390822177
https://zhidao.baidu.com/question/1883618675092246628.html

附加知识:
从Android5.0以后,当一个安全的站点(https)去加载一个非安全的站点(http)时,需要配置Webview加载内容的混合模式,一共有如下三种模式:
1. MIXED_CONTENT_NEVER_ALLOW:Webview不允许一个安全的站点(https)去加载非安全的站点内容(http),比如,https网页内容的图片是http链接。强烈建议App使用这种模式,因为这样更安全。
2. MIXED_CONTENT_ALWAYS_ALLOW:在这种模式下,WebView是可以在一个安全的站点(Https)里加载非安全的站点内容(Http),这是WebView最不安全的操作模式,尽可能地不要使用这种模式。
3. MIXED_CONTENT_COMPATIBILITY_MODE:在这种模式下,当涉及到混合式内容时,WebView会尝试去兼容最新Web浏览器的风格。一些不安全的内容(Http)能被加载到一个安全的站点上(Https),而其他类型的内容将会被阻塞。这些内容的类型是被允许加载还是被阻塞可能会随着版本的不同而改变,并没有明确的定义。这种模式主要用于在App里面不能控制内容的渲染,但是又希望在一个安全的环境下运行。
分析:
在Android5.0以下,默认是采用的MIXED_CONTENT_ALWAYS_ALLOW模式,即总是允许WebView同时加载Https和Http;而从Android5.0开始,默认用MIXED_CONTENT_NEVER_ALLOW模式,即总是不允许WebView同时加载Https和Http。虽然官网给出的建议是,为了安全考虑,使用MIXED_CONTENT_NEVER_ALLOW模式,但是在实际引用中,当我们的服务器已经升级到Https,但是一些页面的资源是第三方的,我们不能要求第三方也都升级到Https,所以我们只能根据系统版本,用代码去设置加载模式为MIXED_CONTENT_ALWAYS_ALLOW。
解决方法:
在webview加载页面之前,设置加载模式为MIXED_CONTENT_ALWAYS_ALLOW,最好做一下版本判断。

欢迎关注我的微信公众号:

 

如无特殊说明,文章均为本站原创,转载请注明出处!

发表回复

您的电子邮箱地址不会被公开。