Android播放flash

garyhu1發表於2017-11-15

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 。

相關文章