gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 24 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章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方法,下面是一个实现例子:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
@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编程使WebView支持HTML5 Video全屏播放的解决方法

全屏后:

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

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

最后此篇关于Android编程使WebView支持HTML5 Video全屏播放的解决方法的文章就讲到这里了,如果你想了解更多关于Android编程使WebView支持HTML5 Video全屏播放的解决方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com