Android播放flash

来源:互联网 发布:瀚资软件咨询有限公司 编辑:程序博客网 时间:2024/05/21 11:03

Android本身并没有播放flash的组件,但是在有Adobe提供的flash插件的情况下,用WebView打开网页,使用网页可以播放flash。所以本文的思路是使用WebView播放flash,通过java代码控制WebView中的javascript代码来控制flash的播放和进度显示操作。由于android 2.2以下的系统不能安装flash插件,所以不能使用此方法播放flash。

首先是要编辑一个能够正常播放flash的网页,并且能够提供相应操作的javascript代码供java代码控制flash的播放。这个是一个关键,如果这个网页写的有问题的话,编译也不会报错,但是flash播放不能正常运行。

示例代码如下:

[html] view plain copy
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <html xmlns="http://www.w3.org/1999/xhtml">   
  3. <head>   
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  5.     <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no, target-densitydpi=device-dpi" />  
  6.   
  7.     <style type="text/css">  
  8.     <!--  
  9.         body {  
  10.             margin: 0;  
  11.             width: 100%;  
  12.             height: 100%;  
  13.             background-color: #FFFFFF;  
  14.             color: #FFFFFF;  
  15.         }  
  16.     //-->  
  17.     </style>  
  18. <title>empty</title>  
  19. </head>  
  20. <body>  
  21. <center>  
  22. <table cellpadding="0" cellspacing="0" border="0">   
  23.     <tr>  
  24.         <td align="center" valign="middle">  
  25.         <object type="application/x-shockwave-flash"  
  26.             id='movie'   
  27.             align="middle"  
  28.             data=""  
  29.             height="300"   
  30.             width="400">  
  31.             <embed>  
  32.                 <param name="movie" value="" />  
  33.                 <param name="quality" value="" />  
  34.                 <param name="wmode" value="" />  
  35.                 <param name="bgColor" value="#FFFFFF" />  
  36.                 <param name="allowScriptAccess" value="always" />  
  37.                 <param name="menu" value="false" />  
  38.                 <param name="scale" value="" />  
  39.                 <param name="allowFullScreen" value="true" />  
  40.             </embed>   
  41.         </object>  
  42.         <script type='text/javascript'>  
  43.             var total;//定义flash影片总桢数  
  44.             var frame_number;//定义flash影片当前桢数  
  45.             var rate = 12;//帧频  
  46.       
  47.             //动态显示播放影片的当前桢/总桢数(进度条显示)  
  48.             function showcount(){  
  49.                 total = movie.TotalFrames();  
  50.                 frame_number = movie.CurrentFrame();  
  51.                 frame_number++;  
  52.                 var progressSize = 500*(frame_number/total);  
  53.                 CallJava.consoleFlashProgress(progressSize,total/12);  
  54.             }  
  55.       
  56.             //播放影片   
  57.             function Play(){  
  58.                 movie.Play();  
  59.                 showcount();  
  60.             }  
  61.               
  62.             //暂停播放  
  63.             function Pause(){  
  64.                 movie.StopPlay();  
  65.             }  
  66.       
  67.             //开始载入flash影片  
  68.             function loadSWF(fsrc, fwidth, fheight){  
  69.                 movie.LoadMovie(0, fsrc);  
  70.                 movie.width = fwidth;  
  71.                 movie.height = fheight;  
  72.                 frame_number = movie.CurrentFrame();  
  73.             }  
  74.               
  75.             //快进或者快退  
  76.             function GoToFrame(progress){  
  77.                 total = movie.TotalFrames();  
  78.                 if(movie.IsPlaying())  
  79.                     Pause();  
  80.                 frame_number = total*progress/500;  
  81.                 movie.GotoFrame(frame_number);  
  82.                 Play();  
  83.             }  
  84.               
  85.             //flash插件不存在  
  86.             function error(){  
  87.                 document.body.style.backgroundImage="url(flash_view_back_7490.jpg)";  
  88.                 document.getElementById("flash_page").innerHTML = "<div style='color:#F00;" +  
  89.                         " font-size:20px; text-align:center; margin-top:50px; margin-left:50px;'>" +  
  90.                         "缺少支持flash播放的插件,请安装后再试!</div>";  
  91.             }  
  92.               
  93.             //设置flash的高  
  94.             function setHeight(height){  
  95.                 movie.height = height;  
  96.                 document.getElementById("flash_page").style.height = height;  
  97.             }  
  98.         </script>  
  99.         </td>   
  100.     </tr>   
  101. </table>   
  102. </center>  
  103.   
  104. </body>  
  105. </html>  

上述代码中使用javascript控制flash的播放,更多的操作请参照博客《JS控制网页中Flash影片的播放(附带各参数)》。代码中的CallJava是用来反向控制java代码中的显示的。java代码中为这个类提供了相应的方法。具体代码如下:

[java] view plain copy
  1. private final class CallJava{  
  2.     public void consoleFlashProgress(float progressSize, int total){  
  3.         showFlashProgress(progressSize, total);  
  4.     }  
  5. }  

  要使用CallJava类,还需要设置WebView的属性:

[java] view plain copy
  1. <span style="white-space:pre">  </span>flash_view.addJavascriptInterface(new CallJava(), "CallJava");  

另外还要设置WebView可以用java调用javascript等属性:

[java] view plain copy
  1. flash_view.getSettings().setJavaScriptEnabled(true);   
  2. flash_view.getSettings().setPluginState(PluginState.ON);  
  3. flash_view.setWebChromeClient(new WebChromeClient());   
  4. flash_view.getSettings().setAllowFileAccess(true);  
  5. flash_view.getSettings().setPluginsEnabled(true);  
  6. flash_view.getSettings().setSupportZoom(true);  
  7. flash_view.getSettings().setAppCacheEnabled(true);  

然后就可以通过java来控制flash的播放了:

[java] view plain copy
  1. public void start(){  
  2.     if(null != flashPath){  
  3.         flash_view.loadUrl("javascript:loadSWF(\""+flashPath+"\", \"" + width + "\", \"" + (height-bottom_height) + "\")");  
  4.         flash_view.loadUrl("javascript:Play()");  
  5.         handler.post(update_progress);  
  6.         play.setImageResource(R.drawable.pause);  
  7.         playing = true;  
  8.     }  
  9.     show();  
  10. }  
  11.   
  12. public void pause(){  
  13.     if(null != flashPath){  
  14.         flash_view.loadUrl("javascript:Pause()");  
  15.         handler.removeCallbacks(update_progress);  
  16.         play.setImageResource(R.drawable.play);  
  17.         playing = false;  
  18.     }  
  19. }  

整体来看一下,是不是觉得很简单呢?那就马上试试吧!

Android播放flash的示例源码下载地址:http://download.csdn.net/detail/iloveyoueveryday/6911903 。

原创粉丝点击