Android简易Flash播放器

原文地址:http://blog.csdn.net/geolo/article/details/6089339

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

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

 

先看工程图和效果图:

 

 

 

工程源码:

 

  

[java:showcolumns]  view plain copy print ?
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
  1. package com.geolo.android.flash;  
  2. import com.geolo.android.FileBrowser;  
  3. import com.geolo.android.R;  
  4. import android.app.Activity;  
  5. import android.app.AlertDialog;  
  6. import android.app.ProgressDialog;  
  7. import android.content.DialogInterface;  
  8. import android.content.Intent;  
  9. import android.os.Bundle;  
  10. import android.os.Handler;  
  11. import android.os.Message;  
  12. import android.util.Log;  
  13. import android.view.KeyEvent;  
  14. import android.view.View;  
  15. import android.webkit.WebChromeClient;  
  16. import android.webkit.WebSettings.PluginState;  
  17. import android.webkit.WebView;  
  18. import android.widget.Button;  
  19. import android.widget.FrameLayout;  
  20. import android.widget.ProgressBar;  
  21. public class FlashActivity extends Activity{  
  22.     private WebView mWebView;  
  23.     private Button playButton,pauseButton,rewindButton,exitButton,fileButton;  
  24.     private ProgressBar mProgressBarHorizontal;  
  25.     private final static int PROGRESSBARSIZE = 0x0000;  
  26.     private final static int FLASH_START = 0x0001;  
  27.     private String flashName ;  
  28.     private boolean stopThread = false;  
  29.     private ProgressDialog mProgressDialog;  
  30.     @Override  
  31.     public void onCreate(Bundle savedInstanceState) {  
  32.         super.onCreate(savedInstanceState);  
  33.         setContentView(R.layout.main);  
  34.         mProgressDialog = new ProgressDialog(this);  
  35.         mProgressDialog.setMessage("Flash动画正在加载,请稍等......");  
  36.         mProgressDialog.show();  
  37.         Intent intent = this.getIntent();  
  38.         String fileName = intent.getStringExtra("fileName");  
  39.         if(fileName != null && !fileName.equals("")){  
  40.             flashName = "file://"+fileName;  
  41.             //flashName = "javascript:setFlashPath(flashName)";  
  42.         }else{  
  43.             flashName = "file:///android_asset/sample/flash.swf";  
  44.         }  
  45.         Log.d(this.getClass().getName(), flashName);          
  46.         mWebView = (WebView)findViewById(R.id.webView01);   
  47.         mProgressBarHorizontal = (ProgressBar)findViewById(R.id.progress_horizontal);  
  48.         this.setProgress(mProgressBarHorizontal.getProgress() * 100);  
  49.         //this.setSecondaryProgress(mProgressBarHorizontal.getSecondaryProgress() * 100);  
  50.         playButton = (Button)findViewById(R.id.playButton);  
  51.         pauseButton = (Button)findViewById(R.id.pauseButton);  
  52.         rewindButton = (Button)findViewById(R.id.rewindButton);  
  53.         exitButton = (Button)findViewById(R.id.exitButton);  
  54.         fileButton = (Button)findViewById(R.id.fileButton);  
  55.         playButton.setOnClickListener(buttonListener);  
  56.         pauseButton.setOnClickListener(buttonListener);  
  57.         rewindButton.setOnClickListener(buttonListener);  
  58.         exitButton.setOnClickListener(buttonListener);  
  59.         fileButton.setOnClickListener(buttonListener);  
  60.         mWebView.getSettings().setJavaScriptEnabled(true);    
  61.         //mWebView.getSettings().setPluginsEnabled(true);  
  62.         mWebView.getSettings().setPluginState(PluginState.ON);  
  63.         mWebView.setWebChromeClient(new WebChromeClient());   
  64.         mWebView.addJavascriptInterface(new CallJava(), "CallJava");  
  65.         mWebView.loadUrl("file:///android_asset/sample/index.html");   
  66.         //mWebView.loadUrl("javascript:setFlashPath('"+flashName+"')");   
  67.         startThread();  
  68.     }  
  69.     Button.OnClickListener buttonListener = new Button.OnClickListener() {    
  70.         @Override  
  71.         public void onClick(View v) {  
  72.             int buttonID = v.getId();  
  73.             switch (buttonID) {  
  74.             case R.id.playButton:  
  75.                 mWebView.loadUrl("javascript:Play()");  
  76.                 showFlashProgress(5);  
  77.                 break;  
  78.             case R.id.pauseButton:  
  79.                 mWebView.loadUrl("javascript:Pause()");  
  80.                 break;  
  81.             case R.id.rewindButton:  
  82.                 //mWebView.loadUrl(flashName);  
  83.                 try {  
  84.                     mWebView.loadUrl("about:blank");  
  85.                     mWebView.loadUrl("file:///android_asset/sample/index.html");   
  86.                     Thread.sleep(1000);  
  87.                     mWebView.loadUrl("javascript:setFlashPath('"+flashName+"')");   
  88.                 } catch (InterruptedException e) {  
  89.                     Log.e(this.getClass().getName(), "Flash Rewind error: ", e);  
  90.                 }  
  91.                 break;  
  92.             case R.id.fileButton:  
  93.                 Intent intent = new Intent();  
  94.                 intent.setClass(FlashActivity.this, FileBrowser.class);  
  95.                 startActivity(intent);  
  96.                 stopThread = true;  
  97.                 FlashActivity.this.finish();  
  98.                 break;  
  99.             case R.id.exitButton:  
  100.                 quitDialog();  
  101.                 break;  
  102.             default:  
  103.                 break;  
  104.             }  
  105.         }  
  106.     };  
  107.     public void showFlashProgress(float progressSize){  
  108.         int size = (int)progressSize;  
  109.         //Toast.makeText(this, size+"", Toast.LENGTH_SHORT).show();  
  110.         mProgressBarHorizontal.setProgress(size);  
  111.     }  
  112.     private void quitDialog(){  
  113.         new AlertDialog.Builder(this)  
  114.         .setMessage("没胆就不要退出")  
  115.         .setPositiveButton("比你有胆"new AlertDialog.OnClickListener() {  
  116.             @Override  
  117.             public void onClick(DialogInterface dialog, int which) {  
  118.                 stopThread = true;  
  119.                 FlashActivity.this.finish();  
  120.             }  
  121.         })  
  122.         .setNegativeButton("怕你了"null)  
  123.         .show();  
  124.     }  
  125.     @Override  
  126.     public boolean onKeyDown(int keyCode, KeyEvent event) {  
  127.         switch (keyCode) {  
  128.         case KeyEvent.KEYCODE_BACK:  
  129.             quitDialog();  
  130.             break;  
  131.         default:  
  132.             break;  
  133.         }  
  134.         return false;  
  135.     }  
  136.     @Override  
  137.     protected void onPause(){  
  138.         super.onPause();  
  139.         mWebView.pauseTimers();  
  140.         if(isFinishing()){  
  141.             mWebView.loadUrl("about:blank");  
  142.             setContentView(new FrameLayout(this));  
  143.         }  
  144.     }  
  145.     @Override  
  146.     protected void onResume(){  
  147.         super.onResume();  
  148.         mWebView.resumeTimers();  
  149.     }  
  150.     private final class CallJava{  
  151.         public void consoleFlashProgress(float  progressSize){  
  152.             showFlashProgress(progressSize);  
  153.         }  
  154.     }  
  155.     private void startThread(){  
  156.         //通过线程来改变ProgressBar的值  
  157.         new Thread(new Runnable() {  
  158.             @Override  
  159.             public void run() {  
  160.                 try {  
  161.                     Thread.sleep(2000);  
  162.                     Message message = new Message();  
  163.                     message.what = FlashActivity.FLASH_START;  
  164.                     FlashActivity.this.myMessageHandler.sendMessage(message);  
  165.                 } catch (InterruptedException e1) {  
  166.                     Thread.currentThread().interrupt();  
  167.                 }  
  168.   
  169.                 while(!stopThread && !Thread.currentThread().isInterrupted()){  
  170.                     try {  
  171.                         Thread.sleep(2000);  
  172.                         Message message2 = new Message();  
  173.                         message2.what = FlashActivity.PROGRESSBARSIZE;  
  174.                         FlashActivity.this.myMessageHandler.sendMessage(message2);  
  175.                     } catch (Exception e) {  
  176.                         Thread.currentThread().interrupt();  
  177.                     }  
  178.                 }  
  179.             }  
  180.         }).start();  
  181.     }  
  182.     Handler myMessageHandler = new Handler() {  
  183.         @Override  
  184.         public void handleMessage(Message msg) {  
  185.             switch (msg.what) {  
  186.             case FlashActivity.PROGRESSBARSIZE:  
  187.                 mWebView.loadUrl("javascript:showcount()");  
  188.                 break;  
  189.             case FlashActivity.FLASH_START:  
  190.                 mWebView.loadUrl("javascript:setFlashPath('"+flashName+"')");   
  191.                 Log.d(this.getClass().getName(),"Start flash : "+flashName);  
  192.                 mProgressDialog.dismiss();  
  193.                 break;  
  194.             default:  
  195.                 break;  
  196.             }  
  197.             super.handleMessage(msg);  
  198.         }  
  199.     };  
  200. }  
 

 

[java]  view plain copy print ?
  1. package com.geolo.android;  
  2. import java.io.File;  
  3. import java.util.List;  
  4. import android.content.Context;  
  5. import android.view.View;  
  6. import android.view.ViewGroup;  
  7. import android.widget.ArrayAdapter;  
  8. import android.widget.TextView;  
  9. public class FileListAdapter extends ArrayAdapter<File>{  
  10.       
  11.     public FileListAdapter(Context context, int Resource,List<File> objects) {  
  12.         super(context,Resource,objects);  
  13.     }  
  14.     @Override  
  15.     public View getView(int position, View convertView, ViewGroup parent) {  
  16.         TextView view = (TextView)super.getView(position, convertView, parent);  
  17.         File file = getItem(position);  
  18.         if (position == 0){  
  19.             view.setText("当前目录:/root" + file.getAbsolutePath());  
  20.         }else if (position == 1 && !isRoot()){  
  21.             view.setText("返回上一个目录");  
  22.         }else{  
  23.             view.setText(file.getName());  
  24.         }  
  25.         return view;  
  26.     }  
  27.       
  28.     public boolean isRoot() {  
  29.         return getItem(0).getParent() == null;  
  30.     }  
  31. }  
 

 

[java]  view plain copy print ?
  1. package com.geolo.android;  
  2. import java.io.File;  
  3. import java.io.FileFilter;  
  4. import java.util.ArrayList;  
  5. import java.util.List;  
  6. import com.geolo.android.flash.FlashActivity;  
  7. import android.app.ListActivity;  
  8. import android.content.Intent;  
  9. import android.net.Uri;  
  10. import android.os.Bundle;  
  11. import android.view.KeyEvent;  
  12. import android.view.View;  
  13. import android.widget.ListView;  
  14. public class FileBrowser extends ListActivity {  
  15.     private static final FileFilter FILTER = new FileFilter() {  
  16.         public boolean accept(File f) {  
  17.             //return f.isDirectory() || f.getName().matches("^.*?//.(jpg|png|bmp|gif)$");  
  18.             return true;  
  19.         }  
  20.     };  
  21.     private FileListAdapter fileList;  
  22.     public void onCreate(Bundle icicle) {  
  23.         super.onCreate(icicle);  
  24.         File sdcard = android.os.Environment.getExternalStorageDirectory();  
  25.         fill(sdcard);  
  26.     }  
  27.     public boolean onKeyDown(int keyCode, KeyEvent event) {  
  28.         if (keyCode == KeyEvent.KEYCODE_BACK && !fileList.isRoot()) {  
  29.             fill(fileList.getItem(1));  
  30.             Intent intent = new Intent();  
  31.             intent.setClass(FileBrowser.this, FlashActivity.class);  
  32.             startActivity(intent);  
  33.             //return true;  
  34.         }  
  35.         return super.onKeyDown(keyCode, event);  
  36.     }  
  37.       
  38.     private void fill(File folder) {  
  39.         List<File> files = new ArrayList<File>();  
  40.         files.add(folder);  
  41.         if (folder.getParentFile() != null){  
  42.             files.add(folder.getParentFile());  
  43.         }  
  44.         for (File file : folder.listFiles(FILTER)) {  
  45.             files.add(file);  
  46.         }  
  47.         fileList = new FileListAdapter(this, android.R.layout.simple_list_item_1, files);  
  48.         setListAdapter(fileList);  
  49.     }  
  50.       
  51.     @Override  
  52.     protected void onListItemClick(ListView l, View v, int position, long id) {  
  53.         File file = fileList.getItem(position);  
  54.         Intent intent = new Intent();  
  55.         intent.setAction(android.content.Intent.ACTION_VIEW);  
  56.         if (file.isDirectory()){  
  57.             fill(file);  
  58.         }else if(file.getName().matches("^.*?//.(jpg|png|bmp|gif)$")){  
  59.             intent.setDataAndType(Uri.fromFile(file), "image/*");  
  60.             startActivity(intent);  
  61.         }else if(file.getName().matches("^.*?//.(swf)$")){  
  62.             intent.setClass(FileBrowser.this, FlashActivity.class);  
  63.             intent.putExtra("fileName", file.getAbsolutePath().replace("/mnt"""));  
  64.             startActivity(intent);  
  65.             FileBrowser.this.finish();  
  66.         }  
  67.     }  
  68. }  
 

 

[xhtml]  view plain copy print ?
  1. <mce:script src="play.js" mce_src="play.js"></mce:script>  
  2. <table border="0" cellpadding="0" cellspacing="1" bgcolor="#000000">  
  3.   <tr>  
  4.     <td>  
  5.      <object id="movie" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"   
  6.          codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0"   
  7.         align="middle">  
  8.        <param name="movie" value="about:blank" />  
  9.        <param name="quality" value="high" />  
  10.      </object>  
  11.     </td>  
  12.   </tr>  
  13. </table>  
  14.      
  15.      
  16.    <!-- <a href="javascript:CallJava.consoleFlashProgress(3)" mce_href="javascript:CallJava.consoleFlashProgress(3)">add Progress</a>  
  17.    <a href="#" mce_href="#" onClick="loadSWF('','testFlash.swf','800','480')">TestButton</a>  -->  
  18.     <p id="geolo"></p>  
  19. <mce:script type="text/javascript"><!--  
  20.   //loadSWF("testFlash.swf","800","480"); //loadSWF("flash地址","宽度","高度")  
  21.   function setFlashPath(filePath){  
  22.      var path = filePath;  
  23.      loadSWF(path,"800","480"); //loadSWF("flash地址","宽度","高度")  
  24.      //geolo.innerText = "abc: " + filePath.toString();  
  25.   }  
  26. // --></mce:script>  
  27.    
 

 

[javascript]  view plain copy print ?
  1. var total;//定义flash影片总桢数  
  2. var frame_number;//定义flash影片当前桢数  
  3. //以下是滚动条图片拖动程序  
  4. var dragapproved=false;  
  5. var z,x,y  
  6. //动态显示播放影片的当前桢/总桢数(进度条显示)  
  7. function showcount(){  
  8.     //已测可用CallJava.consoleFlashProgress(5);  
  9.     total = movie.TotalFrames;  
  10.     frame_number=movie.CurrentFrame();  
  11.     frame_number++;  
  12.     var progressSize = 100*(frame_number/movie.TotalFrames());  
  13.     CallJava.consoleFlashProgress(progressSize);  
  14. }  
  15. //播放影片   
  16. function Play(){  
  17.     movie.Play();  
  18. }  
  19. //暂停播放  
  20. function Pause(){  
  21.  movie.StopPlay();  
  22. }  
  23. //开始载入flash影片  
  24. function loadSWF(fsrc,fwidth,fheight){  
  25.  movie.LoadMovie(0, fsrc);  
  26.  movie.width=fwidth;  
  27.  movie.height=fheight;  
  28.  frame_number=movie.CurrentFrame();  
  29. }  
 

 

main.xml

[c-sharp]  view plain copy print ?
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <!-- autor:geolo 声明:版权所有,违者必究 -->  
  3. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  4.     android:orientation="vertical" android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent">  
  6.     <WebView android:id="@+id/webView01" android:layout_width="wrap_content"  
  7.         android:layout_height="wrap_content" />  
  8.     <ProgressBar android:id="@+id/progress_horizontal"  
  9.         style="?android:attr/progressBarStyleHorizontal" android:layout_width="fill_parent"  
  10.         android:layout_height="wrap_content" android:max="100"  
  11.         android:progress="0" android:secondaryProgress="0" />  
  12.     <LinearLayout android:orientation="horizontal"  
  13.         android:layout_width="fill_parent" android:layout_height="wrap_content">  
  14.         <Button android:id="@+id/playButton" android:layout_width="wrap_content"  
  15.             android:layout_height="wrap_content" android:text="播放" />  
  16.         <Button android:id="@+id/pauseButton" android:layout_width="wrap_content"  
  17.             android:layout_height="wrap_content" android:text="暂停" />  
  18.         <Button android:id="@+id/rewindButton" android:layout_width="wrap_content"  
  19.             android:layout_height="wrap_content" android:text="重播" />  
  20.         <Button android:id="@+id/fileButton" android:layout_width="wrap_content"  
  21.             android:layout_height="wrap_content" android:text="打开文件" />  
  22.         <Button android:id="@+id/exitButton" android:layout_width="wrap_content"  
  23.             android:layout_height="wrap_content" android:text="退出" />  
  24.     </LinearLayout>  
  25. </LinearLayout>    
 

 

[xhtml]  view plain copy print ?
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     package="com.geolo.android" android:versionCode="1"  
  4.     android:versionName="1.0">  
  5.     <application android:icon="@drawable/icon" android:label="@string/app_name">  
  6.         <activity android:name=".flash.FlashActivity" android:label="@string/app_name"  
  7.             android:screenOrientation="landscape"  
  8.             android:theme="@android:style/Theme.NoTitleBar.Fullscreen">  
  9.             <intent-filter>  
  10.                 <action android:name="android.intent.action.MAIN" />  
  11.                 <category android:name="android.intent.category.LAUNCHER" />  
  12.             </intent-filter>  
  13.         </activity>  
  14.         <activity android:name=".FileBrowser" />  
  15.     </application>  
  16.     <supports-screens android:resizeable="true"  
  17.         android:smallScreens="true" android:largeScreens="true"  
  18.         android:normalScreens="true" android:anyDensity="true"></supports-screens>  
  19. </manifest>   
 

 

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



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值