这个是在给儿子写播放器时用到的一些代码,基本上都是网上找的,现在也找不到出处了。在这很感谢这些热心网友的分享。
我在这记一下步骤,省得以后用时又不记得了。
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>
3.2 精华Javascript , 播放,控件,暂停,Java与前台Javascript的交互全在这里面。
每播放一帧,就将进度发送后台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");
MAIL:xcl_168@aliyun.com
我的CSDN Blog:http://blog.csdn.net/xcl168