Android本身并没有播放flash的组件,但是在有Adobe提供的flash插件的情况下,用WebView打开网页,使用网页可以播放flash。所以本文的思路是使用WebView播放flash,通过java代码控制WebView中的javascript代码来控制flash的播放和进度显示操作。由于android 2.2以下的系统不能安装flash插件,所以不能使用此方法播放flash。
首先是要编辑一个能够正常播放flash的网页,并且能够提供相应操作的javascript代码供java代码控制flash的播放。这个是一个关键,如果这个网页写的有问题的话,编译也不会报错,但是flash播放不能正常运行。示例代码如下:
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <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" />
- <style type="text/css">
- <!--
- body {
- margin: 0;
- width: 100%;
- height: 100%;
- background-color: #FFFFFF;
- color: #FFFFFF;
- }
- //-->
- </style>
- <title>empty</title>
- </head>
- <body>
- <center>
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td align="center" valign="middle">
- <object type="application/x-shockwave-flash"
- id='movie'
- align="middle"
- data=""
- height="300"
- width="400">
- <embed>
- <param name="movie" value="" />
- <param name="quality" value="" />
- <param name="wmode" value="" />
- <param name="bgColor" value="#FFFFFF" />
- <param name="allowScriptAccess" value="always" />
- <param name="menu" value="false" />
- <param name="scale" value="" />
- <param name="allowFullScreen" value="true" />
- </embed>
- </object>
- <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 = "<div style='color:#F00;" +
- " font-size:20px; text-align:center; margin-top:50px; margin-left:50px;'>" +
- "缺少支持flash播放的插件,请安装后再试!</div>";
- }
- //设置flash的高
- function setHeight(height){
- movie.height = height;
- document.getElementById("flash_page").style.height = height;
- }
- </script>
- </td>
- </tr>
- </table>
- </center>
- </body>
- </html>
上述代码中使用javascript控制flash的播放,更多的操作请参照博客《 JS控制网页中Flash影片的播放(附带各参数) 》。代码中的CallJava是用来反向控制java代码中的显示的。java代码中为这个类提供了相应的方法。具体代码如下:
- private final class CallJava{
- public void consoleFlashProgress(float progressSize, int total){
- showFlashProgress(progressSize, total);
- }
- }
要使用CallJava类,还需要设置WebView的属性:
- <span style="white-space:pre"> </span>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 。
本文介绍如何在Android设备上使用WebView播放Flash内容。由于Android 2.2以下版本不支持Flash插件,文中提供了适用于更高版本的示例代码,包括如何通过Java代码控制Flash的播放、暂停及进度显示。

1115

被折叠的 条评论
为什么被折叠?



