Android本身並沒有播放flash的組件,但是在有Adobe提供的flash外掛程式的情況下,用WebView開啟網頁,使用網頁可以播放flash。所以本文的思路是使用WebView播放flash,通過java代碼控制WebView中的javascript代碼來控制flash的播放和進度顯示操作。由於android 2.2以下的系統不能安裝flash外掛程式,所以不能使用此方法播放flash。
首先是要編輯一個能夠正常播放flash的網頁,並且能夠提供相應操作的javascript代碼供java代碼控制flash的播放。這個是一個關鍵,如果這個網頁寫的有問題的話,編譯也不會報錯,但是flash播放不能正常運行。
範例程式碼如下:
empty
| <script type='text/javascript'>var total;//定義flash影片總楨數var frame_number;//定義flash影片當前楨數var rate = 12;//幀頻//動態顯示播放影片的當前楨/總楨數(進度條顯示)function showcount(){total = movie.TotalFrames();frame_number = movie.CurrentFrame();frame_number++;var progressSize = 500*(frame_number/total);CallJava.consoleFlashProgress(progressSize,total/12);}//播放影片 function Play(){movie.Play();showcount();}//暫停播放function Pause(){movie.StopPlay();}//開始載入flash影片function loadSWF(fsrc, fwidth, fheight){movie.LoadMovie(0, fsrc);movie.width = fwidth;movie.height = fheight;frame_number = movie.CurrentFrame();}//快進或者快退function GoToFrame(progress){total = movie.TotalFrames();if(movie.IsPlaying())Pause();frame_number = total*progress/500;movie.GotoFrame(frame_number);Play();}//flash外掛程式不存在function error(){document.body.style.backgroundImage="url(flash_view_back_7490.jpg)";document.getElementById("flash_page").innerHTML = "" +"缺少支援flash播放的外掛程式,請安裝後再試!";}//設定flash的高function setHeight(height){movie.height = height;document.getElementById("flash_page").style.height = height;}</script> |
上述代碼中使用javascript控制flash的播放,更多的操作請參照部落格《JS控制網頁中Flash影片的播放(附帶各參數)》。代碼中的CallJava是用來反向控制java代碼中的顯示的。java代碼中為這個類提供了相應的方法。具體代碼如下:
private final class CallJava{public void consoleFlashProgress(float progressSize, int total){showFlashProgress(progressSize, total);}}
要使用CallJava類,還需要設定WebView的屬性:
flash_view.addJavascriptInterface(new CallJava(), "CallJava");
另外還要設定WebView可以用java調用javascript等屬性:
flash_view.getSettings().setJavaScriptEnabled(true); flash_view.getSettings().setPluginState(PluginState.ON);flash_view.setWebChromeClient(new WebChromeClient()); flash_view.getSettings().setAllowFileAccess(true);flash_view.getSettings().setPluginsEnabled(true);flash_view.getSettings().setSupportZoom(true);flash_view.getSettings().setAppCacheEnabled(true);
然後就可以通過java來控制flash的播放了:
public void start(){if(null != flashPath){flash_view.loadUrl("javascript:loadSWF(\""+flashPath+"\", \"" + width + "\", \"" + (height-bottom_height) + "\")");flash_view.loadUrl("javascript:Play()");handler.post(update_progress);play.setImageResource(R.drawable.pause);playing = true;}show();}public void pause(){if(null != flashPath){flash_view.loadUrl("javascript:Pause()");handler.removeCallbacks(update_progress);play.setImageResource(R.drawable.play);playing = false;}}
整體來看一下,是不是覺得很簡單呢?那就馬上試試吧!
Android播放flash的樣本源碼:http://download.csdn.net/detail/iloveyoueveryday/6911903 。