文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2022-06-06 09:38

关注

本文实例讲述了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程序设计有所帮助。

您可能感兴趣的文章:Android如何让WebView中的HTML5页面实现视频全屏播放Android编程实现WebView全屏播放的方法(附源码)Android使用WebView播放flash的方法Android WebView与JS交互全面详解(小结)详解android 用webview加载网页(https和http)Android webview如何加载HTML,CSS等语言的示例Android Webview与ScrollView的滚动兼容及留白处理的方法Android关于WebView中无法定位的问题解决Android开发实现webview中img标签加载本地图片的方法Android studio点击跳转WebView详解详解android webView独立进程通讯方式Android使用WebView实现全屏切换播放网页视频功能


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯