Android播放flash

  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的属性:

	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播放flash

上一篇:小强的HTML5移动开发之路(40)——jqMobi中实践header定义的几种方式


下一篇:[Mugeda HTML5技术教程之15]案例分析:制作移动教育课件