这个是在给儿子写播放器时用到的一些代码,基本上都是网上找的,现在也找不到出处了。在这很感谢这些热心网友的分享。
我在这记一下步骤,省得以后用时又不记得了。
Swf文件要先在Abode官网中安装好播放插件,再利用WebView控件在网页中进行播放。
1. 下载官网的播放插件。
可以利用下面代码检查当前是否有安装。
//检查浏览器是否支持swf private boolean check() { PackageManager pm = getPackageManager(); List<PackageInfo> infoList = pm .getInstalledPackages(PackageManager.GET_SERVICES); for (PackageInfo info : infoList) { if ("com.adobe.flashplayer".equals(info.packageName)) { return true; } } return false; }
2. 使用WebView, 老步骤了。
2.1 AndroidManifest.xml 中要定义
<!-- 使webview有权限访问外部URL --> <uses-permission android:name="android.permission.INTERNET"/>特别的地方来了,要播放swf,需要启用硬件加速,不然文件播放时就是黑屏
<activity android:name="SwfPlayerActivity" android:hardwareAccelerated="true" ></activity>
2.2 在Activity中设好一些基本的属性,及下面这几个必须的属性
//要访问本地文件 webSettings.setAllowFileAccess(true); //要与javascript交互 webSettings.setJavaScriptEnabled(true); //与javascript接口的别名,MyWebViewClient继承自WebViewClient mWebView.addJavascriptInterface(new WebAppInterface(this), "CallJava");
3. 定义要播放swf文件的html文件,这将是以后播放文件的模板。
这玩意相当头痛,记得当时我想了好多法子,找了好长时间啊。
3.1 在html页面中先定义好swf控件,注意下embed标签id,Javascript就是通过它来控制播放。
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" align="middle"> <param name="movie" value="about:blank" /> <param name="quality" value="high" /> <embed src="lucky.swf" bgcolor="#FFFFFF" id="fmovie" height=400 width="100%"></embed> </object>
每播放一帧,就将进度发送后台Java中通知下。 同时,通过其当前帧与总帧数的检查来看文件是否有播放完成。
这个在做自动连播时很有用。但也不能区分所有情况。
比如,有些swf文件在播放完后,会出来再来一次,重新播放之类的按纽一直卡在那,这个要注意。
<script type="text/javascript"> var playover=true;//直接播放 var total;//定义flash影片总帧数 var frame_number=-1;//定义flash影片当前帧数 //动态显示播放影片的当前帧/总帧数(进度条显示) function showcount(){ //已测可用CallJava.consoleFlashProgress(5); var num=1+fmovie.CurrentFrame(); var millisec=150; if(num<frame_number || num==total) { CallJava.consoleFlashProgress(100); millisec=1000; } else CallJava.consoleFlashProgress(100*(num/total)); frame_number=num; //geolo.innerText = "n/m: "+frame_number+"/"+total setTimeout(showcount,millisec); } function isLoad(){ if(fmovie.PercentLoaded()==100)frame_number=0; } //加载影片 function Load(){ if(frame_number>=0) { total = fmovie.TotalFrames(); if(playover && total>1) Play(); CallJava.FlashLoaded(); setTimeout(showcount,100); }else { setTimeout(Load,100); setTimeout(isLoad,50); } } //播放影片 function Play(){ playover=true; fmovie.Play(); } //暂停播放 function Pause(){ fmovie.StopPlay(); } //转到指定帧 function PlayLoop(){ alert("playloop!"); //fmovie.rewind(); //fmovie.gotoframe(0); } //影片高宽 function SetWH(x,y){ var m=document.getElementById("fmovie"); m.height=y;//m.width=x; } setTimeout(Load,100); </script>
4. Activity中的另外一些处理
WebView的goBack处理
// webview can go back mWebView.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK && mWebView.canGoBack()) { mWebView.goBack(); return true; } return false; } });
//播放控制: //播放 mWebView.loadUrl("javascript:Play()"); //暂停 mWebView.loadUrl("javascript:Pause()"); //停止 mWebView.loadUrl("javascript:playover=false");
我的CSDN Blog:http://blog.csdn.net/xcl168