zoukankan      html  css  js  c++  java
  • 【转】Android HTML5 Video视频标签自动播放与自动全屏问题解决

               为了解决 HTML5Video视频标签自动播放与全屏问题,在网上找了很多相关资料,网上也很多关于此问题解决方法,但几乎都不能解决问题,特别对各大视频网站传回来的html5网页视频自动播放与全屏问题,我是这样解决的:


     
    1. webview.setWebChromeClient(new WebChromeClient() {  
    2.   
    3.   
    4.   
    5.   
    6.             public void onShowCustomView(View view, CustomViewCallback callback) {  
    7.             Log.e("Media", "onShowCustomView ............ ");  
    8.   
    9.   
    10.                 if (myCallback != null) {  
    11.                       myCallback.onCustomViewHidden();  
    12.                       myCallback = null ;  
    13.                       Log.e("Media", "myCallback.onCustomViewHidden()...");  
    14.                       return;  
    15.                }  
    16.   
    17.   
    18.                 long id = Thread.currentThread().getId();  
    19.               
    20.                ViewGroup parent = (ViewGroup) webview.getParent();  
    21.                String s = parent.getClass().getName();  
    22.                Log.v("WidgetChromeClient", "rong debug Ex: " + s);  
    23.                parent.removeView( webview);  
    24.                parent.addView(view);  
    25.                myView = view;  
    26.                myCallback = callback;  
    27.   
    28.   
    29.                   
    30.                   
    31.         }  
    32.   
    33.   
    34.          private View myView = null;  
    35.          private CustomViewCallback myCallback = null;  
    36.           
    37.           
    38.          public void onHideCustomView() {  
    39.                  
    40.                 long id = Thread.currentThread().getId();  
    41.                 Log.v("Media", "onrong debug in hideCustom Ex: " + id);  
    42.                  
    43.                  
    44.                 if (myView != null) {  
    45.                        
    46.                       if (myCallback != null) {  
    47.                              myCallback.onCustomViewHidden();  
    48.                              myCallback = null ;  
    49.                      }  
    50.                        
    51.                      ViewGroup parent = (ViewGroup) myView.getParent();  
    52.                      parent.removeView( myView);  
    53.                      parent.addView(webview);  
    54.                      myView = null;  
    55.                }  
    56.          }  
    57.   
    58.   
    59. });  


    这段代码网上很多地方能找到的,但这是实现全屏播放的前提,一旦触发全屏事件,系统就会调用onShowCustomView方法
    实现自动播放功能,就是在网络加载完成后,再延时一些时间如1s后,执行这JAVA脚本

     
    1. String js="javascript: var v=document.getElementsByTagName('video')[0]; "  
    2.          +"v.play(); ";  
    3. webview.loadUrl(js);  


    这样就可以自动开始播放了
    要实现让它自动全屏播放,可以执行这JAVA脚本:

     
    1. String js="javascript: var v=document.getElementsByTagName('video')[0]; "+"v.webkitEnterFullscreen(); ";  
    2. webview.loadUrl(js);  


    注意实现全屏播放要在视频开始播放后,才能调用,否则可能会现异常


    如果你想知道视频什么时候开始播放,就是得到视频开始播放事件,方法如下:
    先在代码上定义这样接口
    [java] view plaincopy
     
    1. private final class DemoJavaScriptInterface  
    2. {  
    3.               DemoJavaScriptInterface(){}  
    4.   
    5.   
    6.               public void clickonAndroid(){  
    7.                     
    8.                      
    9.                     Toast.makeText(getApplicationContext(), "视频开始播放...",Toast.LENGTH_SHORT).show();                 
    10.   
    11.   
    12.                       
    13.               }  
    14.               public void endonAndroid(){  
    15.                     
    16.                      
    17.                     Toast.makeText(getApplicationContext(), "视频结束",Toast.LENGTH_SHORT).show();                  
    18.   
    19.   
    20.                       
    21.               }  
    22. }  


     
    1. webview.addJavascriptInterface(new DemoJavaScriptInterface(), "demo");  


    然后在在视频开始播放之前,执行这JAVA脚本
    [java] view plaincopy
     
    1. String js="javascript: var v=document.getElementsByTagName('video')[0]; "  
    2.      +"v.addEventListener('playing', function() { window.demo.clickonAndroid(); }, true); ";  
    3. webview.loadUrl(js);  






    当然了你也可以得到视频播放结束事件执行这JAVA脚本

     
    1. String js="javascript: var v=document.getElementsByTagName('video')[0]; "  
    2.      +"v.addEventListener('ended', function() { window.demo.endonAndroid(); }, true); ";  
    3. webview.loadUrl(js);  






    一般在android平台上,网络视频网站可能不会给你传回Html5 Video网页,这时候就可以设置UserAgent,如可能设置成IPhone或IPad环境,让它返回tml5 Video网页

    1. webview.getSettings().setUserAgentString("Mozilla/5.0 (iPad; CPU OS 5_1 " +   
    2.                                  "like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko ) Version/5.1 " +   
    3.                                  "Mobile/9B176 Safari/7534.48.3");  


    以上方法就是我在Android 网页视频一些心得,也许能给在你这方面开发提供帮助
  • 相关阅读:
    预热buffer pool
    MySQL · 性能优化· InnoDB buffer pool flush策略漫谈
    事务并发控制
    LOAD DATA INFILE – performance case study
    隐式锁
    percona-xtrabackup安装
    mysql 表空间及索引的查看方法
    mysql用户权限
    mysql修改数据库名
    MySQL对innodb某一个表进行移动
  • 原文地址:https://www.cnblogs.com/qianyukun/p/4792162.html
Copyright © 2011-2022 走看看