上一节,大体说了下在Android程序中嵌套Flash动画。这次按照上次的内容做个扩展,做个简易的flash播放器。

前提条件如上一节所说,需要Android2.2平台和安装flash的插件。

先看工程图和效果图:

工程源码:

package com.geolo.android.flash; import com.geolo.android.FileBrowser; import com.geolo.android.R; import android.app.Activity; import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.KeyEvent; import android.view.View; import android.webkit.WebChromeClient; import android.webkit.WebSettings.PluginState; import android.webkit.WebView; import android.widget.Button; import android.widget.FrameLayout; import android.widget.ProgressBar; public class FlashActivity extends Activity{private WebView mWebView;private Button playButton,pauseButton,rewindButton,exitButton,fileButton;private ProgressBar mProgressBarHorizontal;private final static int PROGRESSBARSIZE = 0x0000;private final static int FLASH_START = 0x0001;private String flashName ;private boolean stopThread = false;private ProgressDialog mProgressDialog;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);mProgressDialog = new ProgressDialog(this);mProgressDialog.setMessage("Flash动画正在加载,请稍等......");mProgressDialog.show();Intent intent = this.getIntent();String fileName = intent.getStringExtra("fileName");if(fileName != null && !fileName.equals("")){flashName = "file://"+fileName;//flashName = "javascript:setFlashPath(flashName)";}else{flashName = "file:///android_asset/sample/flash.swf";}Log.d(this.getClass().getName(), flashName); mWebView = (WebView)findViewById(R.id.webView01); mProgressBarHorizontal = (ProgressBar)findViewById(R.id.progress_horizontal);this.setProgress(mProgressBarHorizontal.getProgress() * 100);//this.setSecondaryProgress(mProgressBarHorizontal.getSecondaryProgress() * 100);playButton = (Button)findViewById(R.id.playButton);pauseButton = (Button)findViewById(R.id.pauseButton);rewindButton = (Button)findViewById(R.id.rewindButton);exitButton = (Button)findViewById(R.id.exitButton);fileButton = (Button)findViewById(R.id.fileButton);playButton.setOnClickListener(buttonListener);pauseButton.setOnClickListener(buttonListener);rewindButton.setOnClickListener(buttonListener);exitButton.setOnClickListener(buttonListener);fileButton.setOnClickListener(buttonListener);mWebView.getSettings().setJavaScriptEnabled(true); //mWebView.getSettings().setPluginsEnabled(true);mWebView.getSettings().setPluginState(PluginState.ON);mWebView.setWebChromeClient(new WebChromeClient()); mWebView.addJavascriptInterface(new CallJava(), "CallJava");mWebView.loadUrl("file:///android_asset/sample/index.html"); //mWebView.loadUrl("javascript:setFlashPath('"+flashName+"')"); startThread();}Button.OnClickListener buttonListener = new Button.OnClickListener() { @Overridepublic void onClick(View v) {int buttonID = v.getId();switch (buttonID) {case R.id.playButton:mWebView.loadUrl("javascript:Play()");showFlashProgress(5);break;case R.id.pauseButton:mWebView.loadUrl("javascript:Pause()");break;case R.id.rewindButton://mWebView.loadUrl(flashName);try {mWebView.loadUrl("about:blank");mWebView.loadUrl("file:///android_asset/sample/index.html"); Thread.sleep(1000);mWebView.loadUrl("javascript:setFlashPath('"+flashName+"')"); } catch (InterruptedException e) {Log.e(this.getClass().getName(), "Flash Rewind error: ", e);}break;case R.id.fileButton:Intent intent = new Intent();intent.setClass(FlashActivity.this, FileBrowser.class);startActivity(intent);stopThread = true;FlashActivity.this.finish();break;case R.id.exitButton:quitDialog();break;default:break;}}};public void showFlashProgress(float progressSize){int size = (int)progressSize;//Toast.makeText(this, size+"", Toast.LENGTH_SHORT).show();mProgressBarHorizontal.setProgress(size);}private void quitDialog(){new AlertDialog.Builder(this).setMessage("没胆就不要退出").setPositiveButton("比你有胆", new AlertDialog.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {stopThread = true;FlashActivity.this.finish();}}).setNegativeButton("怕你了", null).show();}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {switch (keyCode) {case KeyEvent.KEYCODE_BACK:quitDialog();break;default:break;}return false;}@Overrideprotected void onPause(){super.onPause();mWebView.pauseTimers();if(isFinishing()){mWebView.loadUrl("about:blank");setContentView(new FrameLayout(this));}}@Overrideprotected void onResume(){super.onResume();mWebView.resumeTimers();}private final class CallJava{public void consoleFlashProgress(float progressSize){showFlashProgress(progressSize);}}private void startThread(){//通过线程来改变ProgressBar的值new Thread(new Runnable() {@Overridepublic void run() {try {Thread.sleep(2000);Message message = new Message();message.what = FlashActivity.FLASH_START;FlashActivity.this.myMessageHandler.sendMessage(message);} catch (InterruptedException e1) {Thread.currentThread().interrupt();}while(!stopThread && !Thread.currentThread().isInterrupted()){try {Thread.sleep(2000);Message message2 = new Message();message2.what = FlashActivity.PROGRESSBARSIZE;FlashActivity.this.myMessageHandler.sendMessage(message2);} catch (Exception e) {Thread.currentThread().interrupt();}}}}).start();}Handler myMessageHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case FlashActivity.PROGRESSBARSIZE:mWebView.loadUrl("javascript:showcount()");break;case FlashActivity.FLASH_START:mWebView.loadUrl("javascript:setFlashPath('"+flashName+"')"); Log.d(this.getClass().getName(),"Start flash : "+flashName);mProgressDialog.dismiss();break;default:break;}super.handleMessage(msg);}}; }

package com.geolo.android; import java.io.File; import java.util.List; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.TextView; public class FileListAdapter extends ArrayAdapter<File>{public FileListAdapter(Context context, int Resource,List<File> objects) {super(context,Resource,objects);}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {TextView view = (TextView)super.getView(position, convertView, parent);File file = getItem(position);if (position == 0){view.setText("当前目录:/root" + file.getAbsolutePath());}else if (position == 1 && !isRoot()){view.setText("返回上一个目录");}else{view.setText(file.getName());}return view;}public boolean isRoot() {return getItem(0).getParent() == null;} }

package com.geolo.android; import java.io.File; import java.io.FileFilter; import java.util.ArrayList; import java.util.List; import com.geolo.android.flash.FlashActivity; import android.app.ListActivity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.KeyEvent; import android.view.View; import android.widget.ListView; public class FileBrowser extends ListActivity {private static final FileFilter FILTER = new FileFilter() {public boolean accept(File f) {//return f.isDirectory() || f.getName().matches("^.*?//.(jpg|png|bmp|gif)$");return true;}};private FileListAdapter fileList;public void onCreate(Bundle icicle) {super.onCreate(icicle);File sdcard = android.os.Environment.getExternalStorageDirectory();fill(sdcard);}public boolean onKeyDown(int keyCode, KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_BACK && !fileList.isRoot()) {fill(fileList.getItem(1));Intent intent = new Intent();intent.setClass(FileBrowser.this, FlashActivity.class);startActivity(intent);//return true;}return super.onKeyDown(keyCode, event);}private void fill(File folder) {List<File> files = new ArrayList<File>();files.add(folder);if (folder.getParentFile() != null){files.add(folder.getParentFile());}for (File file : folder.listFiles(FILTER)) {files.add(file);}fileList = new FileListAdapter(this, android.R.layout.simple_list_item_1, files);setListAdapter(fileList);}@Overrideprotected void onListItemClick(ListView l, View v, int position, long id) {File file = fileList.getItem(position);Intent intent = new Intent();intent.setAction(android.content.Intent.ACTION_VIEW);if (file.isDirectory()){fill(file);}else if(file.getName().matches("^.*?//.(jpg|png|bmp|gif)$")){intent.setDataAndType(Uri.fromFile(file), "image/*");startActivity(intent);}else if(file.getName().matches("^.*?//.(swf)$")){intent.setClass(FileBrowser.this, FlashActivity.class);intent.putExtra("fileName", file.getAbsolutePath().replace("/mnt", ""));startActivity(intent);FileBrowser.this.finish();}} }

<mce:script src="play.js" mce_src="play.js"></mce:script> <table border="0" cellpadding="0" cellspacing="1" bgcolor="#000000"><tr><td><object id="movie" 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" /></object></td></tr> </table><!-- <a href="javascript:CallJava.consoleFlashProgress(3)" mce_href="javascript:CallJava.consoleFlashProgress(3)">add Progress</a><a href="#" mce_href="#" onClick="loadSWF('','testFlash.swf','800','480')">TestButton</a> --><p id="geolo"></p> <mce:script type="text/javascript"><!--//loadSWF("testFlash.swf","800","480"); //loadSWF("flash地址","宽度","高度")function setFlashPath(filePath){var path = filePath;loadSWF(path,"800","480"); //loadSWF("flash地址","宽度","高度")//geolo.innerText = "abc: " + filePath.toString();} // --></mce:script>

var total;//定义flash影片总桢数 var frame_number;//定义flash影片当前桢数 //以下是滚动条图片拖动程序 var dragapproved=false; var z,x,y //动态显示播放影片的当前桢/总桢数(进度条显示) function showcount(){//已测可用CallJava.consoleFlashProgress(5);total = movie.TotalFrames;frame_number=movie.CurrentFrame();frame_number++;var progressSize = 100*(frame_number/movie.TotalFrames());CallJava.consoleFlashProgress(progressSize); } //播放影片 function Play(){movie.Play(); } //暂停播放 function Pause(){movie.StopPlay(); } //开始载入flash影片 function loadSWF(fsrc,fwidth,fheight){movie.LoadMovie(0, fsrc);movie.width=fwidth;movie.height=fheight;frame_number=movie.CurrentFrame(); }

main.xml

<?xml version="1.0" encoding="utf-8"?> <!-- autor:geolo 声明:版权所有,违者必究 --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical" android:layout_width="fill_parent"android:layout_height="fill_parent"><WebView android:id="@+id/webView01" android:layout_width="wrap_content"android:layout_height="wrap_content" /><ProgressBar android:id="@+id/progress_horizontal"style="?android:attr/progressBarStyleHorizontal" android:layout_width="fill_parent"android:layout_height="wrap_content" android:max="100"android:progress="0" android:secondaryProgress="0" /><LinearLayout android:orientation="horizontal"android:layout_width="fill_parent" android:layout_height="wrap_content"><Button android:id="@+id/playButton" android:layout_width="wrap_content"android:layout_height="wrap_content" android:text="播放" /><Button android:id="@+id/pauseButton" android:layout_width="wrap_content"android:layout_height="wrap_content" android:text="暂停" /><Button android:id="@+id/rewindButton" android:layout_width="wrap_content"android:layout_height="wrap_content" android:text="重播" /><Button android:id="@+id/fileButton" android:layout_width="wrap_content"android:layout_height="wrap_content" android:text="打开文件" /><Button android:id="@+id/exitButton" android:layout_width="wrap_content"android:layout_height="wrap_content" android:text="退出" /></LinearLayout> </LinearLayout>

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.geolo.android" android:versionCode="1"android:versionName="1.0"><application android:icon="@drawable/icon" android:label="@string/app_name"><activity android:name=".flash.FlashActivity" android:label="@string/app_name"android:screenOrientation="landscape"android:theme="@android:style/Theme.NoTitleBar.Fullscreen"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activity android:name=".FileBrowser" /></application><supports-screens android:resizeable="true"android:smallScreens="true" android:largeScreens="true"android:normalScreens="true" android:anyDensity="true"></supports-screens> </manifest>

工程打包资源下载:http://download.csdn.net/source/2926306

Android简易Flash播放器相关推荐

  1. Android简易音乐播放器

    1.制作一个简易的音乐播放器 使用软件:Android studio + jdk1.8 + Gradle6.5(其他版本也可以) 2.activity_main.xml文件(主页面的编写) 先看一下示 ...

  2. Android简易音乐播放器实现代码

    本文实例为大家分享了Android音乐播放器的具体代码,供大家参考,具体内容如下 1.播放项目内的音乐 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 1 ...

  3. android 简易的播放器(实现了 播放、暂停、下一首和上一首)

    最近项目中遇到一点小需求,就是有个本地音乐播放 ,功能简单,实现了 播放.暂停.下一首和上一首,有基本需要的小伙伴可以参考(其他篇章写过遍历文件) 1.首先是xml 布局 <?xml versi ...

  4. 最全的Android开源音乐播放器源码汇总

    收集了很多音乐播放器类的Android项目源码,非常不错的开源项目,会让你事半功倍,希望大家补充...谢谢! Android基于经纬度切歌的冲绳音乐播放器源码 http://neast.cn/foru ...

  5. Android 9.0 flash播放器播放swf源码讲解

    其实不是什么新技术,因为android4.1之后的android 浏览器内核版本发生了变化导致 Adobe 的Flash插件无法正常运行,大家的Flash无法正常播放.而网络上所能搜索到的方法全是We ...

  6. Android Studio简易音乐播放器设计作业

    Android Studio简易音乐播放器设计作业 实验成功展示 实验代码 MainActivity.java XML文件 class文件 利用BroadcastReceiver模拟音乐播放器,实现播 ...

  7. wince flash Android,关于wince下用C#实现flash播放器

    我的开发是基于 6410 ARMV4I 的一个触摸屏设备 在windows下,用vc#只要引用AxInterop.ShockwaveFlashObjects.dll和Interop.Shockwave ...

  8. Android的媒体播放器------简易音乐播放器(详解)

    一.案例效果 二.欢迎界面的设计与功能 2.1 .案例效果 设计一个倒计时自动跳转的页面 2.2. 布局界面 activity_welcome.xml 参考代码: <?xml version=& ...

  9. Android Studio——简易音频播放器

    目的 设计一个具有选歌功能的音频播放器 工具及环境 使用java语言,在Android studio平台上进行开发 功能设计 界面有三个按钮选项,可以停止.播放.暂停音乐.通过选择列表的音乐,播放相应 ...

最新文章

  1. 双控专业就业机器人_工业机器人专业好就业吗?有哪些机器人技术岗位?
  2. Windows查杀端口
  3. java 在线电影_java电影在线影评管理系统
  4. ubuntu14.04 访问windows目录的方法 mount.cifs方式 取代smbfs方式
  5. Oracle segment啥意思,关于oracle数据库段segment的小结
  6. Oracle occi 抓包,instantclient 32下载-instantclient-basic(轻量级数据库)32位 11.2.0.4.0 官方版 - 河东下载站...
  7. Docker(三)关于docker 的应用场景
  8. SQL SERVER 2008 恢复远程备份文件
  9. Scala学习笔记(1)-环境搭建
  10. Activity与Fragment生命周期
  11. PHP正则怎样词语过滤,如何用正则替换敏感词?敏感词过滤? - SegmentFault
  12. c++ map 修改value_深度解密Go语言之map
  13. Nacos视频教程分享
  14. C语言的酒店客房管理系统
  15. 王者怎么看微信以前玩过的服务器,王者荣耀如何查看微信帐号在那个区玩过
  16. 锥度用计算机怎么算,大小头体积,表面积,锥度,展开圆心角,质量计算公式与在线计算器_三贝计算网_23bei.com...
  17. Ps图层工具怎么使用?以下是我分享的关于ps图层几个小知识
  18. Android7.0及以上打开相机闪退,startActivityForResult报错解决
  19. 警告:计算出的值未被使用warning: value computed is not used [-Wunused-value]
  20. 群集系统服务器,多服务器群集 2008

热门文章

  1. 植物大战僵尸无限阳光(包括阳光基址的寻找)
  2. 牙菌斑、牙垢、牙结石、龋齿需要怎么来清洁
  3. 设计心理学中的映射交互设计概念|优漫动游
  4. 示例:波士顿房价预测
  5. [!] CocoaPods was not able to update the `xxx` repo. If this is an unexpected issue and persists
  6. python分数约分_python分数的四则运算
  7. oracle 12c rac tablespace 表空间删除办法
  8. 脑与认知神经科学Matlab Psytoolbox认知科学实验设计——视错觉
  9. matlab spline边界约束,三阶样条插值(一阶导数边界条件) matlab程序
  10. 《人机交互技术》结课作业:界面调研报告交互界面设计快速原型设计(华科软院)