打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Android简易Flash播放器(暂停、播放、重播)
申明下:重播有js调用flash函数重播有问题。这个和安全沙箱有关系。我搞不定。所以这里的重播是刷新了WebView。很多同学问,在模拟器上怎么实现flash,很遗憾的说,模拟器上是无法做到的(在我认知范围内),因为adobe做这个插件的时候,里面有什么硬件加速的功能之类的,模拟器不是真机,很多东西都只是一个"虚拟机"而已。。。
上一节,大体说了下在Android程序中嵌套Flash动画。这次按照上次的内容做个扩展,做个简易的flash播放器。

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

先看工程图和效果图:



工程源码:

  
  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.                                 while(!stopThread && !Thread.currentThread().isInterrupted()){
  169.                                         try {
  170.                                                 Thread.sleep(2000);
  171.                                                 Message message2 = new Message();
  172.                                                 message2.what = FlashActivity.PROGRESSBARSIZE;
  173.                                                 FlashActivity.this.myMessageHandler.sendMessage(message2);
  174.                                         } catch (Exception e) {
  175.                                                 Thread.currentThread().interrupt();
  176.                                         }
  177.                                 }
  178.                         }
  179.                 }).start();
  180.         }

  181.         Handler myMessageHandler = new Handler() {
  182.                 @Override
  183.                 public void handleMessage(Message msg) {
  184.                         switch (msg.what) {
  185.                         case FlashActivity.PROGRESSBARSIZE:
  186.                                 mWebView.loadUrl("javascript:showcount()");
  187.                                 break;
  188.                         case FlashActivity.FLASH_START:
  189.                                 mWebView.loadUrl("javascript:setFlashPath('"+flashName+"')");
  190.                                 Log.d(this.getClass().getName(),"Start flash : "+flashName);
  191.                                 mProgressDialog.dismiss();
  192.                                 break;
  193.                         default:
  194.                                 break;
  195.                         }
  196.                         super.handleMessage(msg);
  197.                 }
  198.         };
  199. }
复制代码

[


工程打包资源下载:http://download.csdn.net/source/2926306或者
geolo简易flash播放器.rar (1.67 MB, 下载次数: 1322)


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Android WebView 缓存处理
WebView使用总结(应用函数与JS函数互相调用) 对网页中JS的类似Alert
Android 嵌入网页,为H5开发做伏笔
ViewPager+Fragment基本使用方法(附源码)
Android中Webview使用自定义的javascript进行回调
史上最全WebView使用,附送Html5Activity一份
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服