Flash基础入门之flash数据交互
小标 2018-08-24 来源 : 阅读 1035 评论 0

摘要:本文主要向大家介绍了Flash基础入门之flash数据交互,通过具体的内容向大家展现,希望对大家学习Flash基础入门有所帮助。

本文主要向大家介绍了Flash基础入门之flash数据交互,通过具体的内容向大家展现,希望对大家学习Flash基础入门有所帮助。

  
[java] view plain copy
   //类中类:定义js中调用的Android类  
lass RunJavaScript {  
public void runJs2Activity(String str) {  
    strFromJs = str;  
    mScriptHandler.removeCallbacks(mPlayerRunnable);  
    mScriptHandler.postDelayed(mPlayerRunnable, 300);  
}  
Android中是Vebview加载html文件的,其中交互类的别名是这样定义的
[java] view plain copy
//给网页文件添加Android与JS交互函数的定义  
mWebView.addJavascriptInterface(new RunJavaScript(), "playerJs");  
下面是Android完整代码
 
 
[java] view plain copy
package com.ideal.swfplayer;  
/************************ 
 *用来加载flash.html文件* 
 ************************/  
import java.io.File;  
import java.util.Timer;  
import java.util.TimerTask;  
import sunvision.database.DBOperation;  
import sunvision.dialog.MatchDialog;  
import sunvision.dialog.TipDialog;  
import sunvision.dialog.VersionDialog;  
import sunvision.file.FileOperation;  
import sunvision.tools.FlashPath;  
import sunvision.tools.IdealSystemProperties;  
import android.annotation.SuppressLint;  
import android.app.Activity;  
import android.content.Intent;  
import android.graphics.Bitmap;  
import android.os.Build;  
import android.os.Bundle;  
import android.os.Handler;  
import android.os.Message;  
import android.os.SystemClock;  
import android.util.Log;  
import android.view.Gravity;  
import android.view.KeyEvent;  
import android.view.LayoutInflater;  
import android.view.MotionEvent;  
import android.view.View;  
import android.view.ViewGroup;  
import android.view.WindowManager;  
import android.webkit.WebChromeClient;  
import android.webkit.WebSettings;  
import android.webkit.WebSettings.PluginState;  
import android.webkit.WebView;  
import android.webkit.WebViewClient;  
import android.widget.FrameLayout;  
import android.widget.ImageView;  
import android.widget.TextView;  
import android.widget.Toast;  
  
public class MainFlashActivity extends Activity {  
    private WebView mWebView = null;  
    private FrameLayout mFrameLayout = null;  
    private ImageView mImageView = null;  
    private Timer mTimer = null;  
    private Timer mTimer2 = null;  
    private WebSettings settings;  
    private String strFromJs = "";  
    private String TAG = "SwfPlayer";  
    private int mLoadingIndex = 0;  
    private int mWebViewLoadTimes = 0;  
    private int versionloadtime=0;  
    private MatchDialog mDialogManager;  
    private Handler mHandler = null;  
    private FileOperation mFileUnit;  
    private boolean isversionup=true;  
    Handler mScriptHandler = new Handler() {};  
    //加载驱动  
    public native void native_initPlayer( ) throws Exception;  
    public native void native_prepare() throws Exception;  
    public native void native_start();  
    public native void native_finish();   
  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_flash);  
        //初始化UI界面  
        InitUI();  
        //加载主界面  
        loadSwf(FlashPath.MainPath);  
        //等待消息传过来更新界面  
        //mHandler.post(task);  //启动定时器1秒刷新一次  
        mHandler = new Handler() {  
            @SuppressLint("Recycle")   
            public void handleMessage(Message msg) {  
                Log.i(TAG, "PlayerActivity-mLoadingIndex==" + mLoadingIndex);  
                switch (msg.arg1) {  
                case 0:  
                    mImageView.setImageResource(R.drawable.flashloading);  
                    break;  
                case 1:  
                    mTimer.cancel();  
                    mImageView.setVisibility(View.GONE);  
                    mImageView.destroyDrawingCache();  
                    mLoadingIndex = 0;  
                    break;  
                case 6:  
                    mWebView.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(),MotionEvent.ACTION_DOWN, mWebView.getLeft() + 5,mWebView.getTop() + 5, 0));  
                    mWebView.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(), MotionEvent.ACTION_UP,mWebView.getLeft() + 5, mWebView.getTop() + 5, 0));  
                    break;  
                default:  
                    break;  
                }  
                super.handleMessage(msg);  
            }  
        };  
  
    }  
    //UI界面初始化函数  
    private void InitUI() {  
        mFileUnit = new FileOperation(getApplicationContext());  
        mFileUnit.createFlashPlayerTrust();  
        mFrameLayout = (FrameLayout) findViewById(R.id.player_frameLayout);  
        mImageView = (ImageView) findViewById(R.id.swf_loading_img);  
        mWebView = (WebView) findViewById(R.id.webView_show);  
    }  
  
     //加载Flash动画  
        @SuppressLint({ "SetJavaScriptEnabled", "Recycle" })   
        public void loadSwf(String swfPath) {  
            //获得配置函数  
            settings = mWebView.getSettings();  
            //设置允许与js交互  
            settings.setJavaScriptEnabled(true);  
            //设置允许文件操作  
            settings.setAllowFileAccess(true);  
            //设置允许使用Adobe Flash播放视频  
            settings.setPluginState(PluginState.ON);  
            //设置加载方式是替换加载,而不是新页面加载  
            settings.setLoadWithOverviewMode(true);  
            //设置编码方式  
            settings.setDefaultTextEncodingName("GBK");  
            //设置透明背景  
            mWebView.setBackgroundColor(0);  
            //重写Flash加载辅助函数  
            mWebView.setWebChromeClient(new WebChromeClient() {  
                public void onShowCustomView(View view, int requestedOrientation,  
                        WebChromeClient.CustomViewCallback callback) {  
                    super.onShowCustomView(view, callback);  
                    //Android SDK版本  
                    if (Build.VERSION.SDK_INT >= 14) {  
                        if (view instanceof FrameLayout) {  
                            mFrameLayout.addView(view,new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT,Gravity.CENTER));  
                            mFrameLayout.setVisibility(View.VISIBLE);  
                        }  
                    }  
                }  
                @Override  
                public void onHideCustomView() {  
                    super.onHideCustomView();  
                }  
            });  
            //重写Flash加载主要函数  
            mWebView.setWebViewClient(new WebViewClient() {  
                @Override  
                public boolean shouldOverrideUrlLoading(WebView view, String url) {  
                    view.loadUrl(url);  
                    return true;  
                }  
                //Flash启东时调用  
                @Override  
                public void onPageStarted(WebView view, String url, Bitmap favicon) {  
                    super.onPageStarted(view, url, favicon);  
                    mWebViewLoadTimes++;  
  
                }  
                //Flash加载完成之后调用  
                @Override  
                public void onPageFinished(WebView view, String url) {  
                    super.onPageFinished(view, url);  
                    //Flash加载之前会有一段时间是白屏,为了掩盖,让五张图片隔时刷新  
                    if (mWebViewLoadTimes == 1) {  
                        mTimer = new Timer();  
                        mTimer.schedule(new TimerTask() {  
                            @Override  
                            public void run() {   
                                Message msg = new Message();  
                                msg.what = 0;  
                                msg.arg1 = mLoadingIndex;  
                                mHandler.sendMessage(msg);  
                                mLoadingIndex++;  
                            }  
                        }, 0, 2000);  
                        //flash偶尔会失去焦点,让flash加载完成之后每隔2秒点击一次界面获得焦点  
                        mTimer2 = new Timer();  
                        mTimer2.schedule(new TimerTask() {  
                            @Override  
                            public void run() {   
                                Message msg = new Message();  
                                msg.what = 0;  
                                msg.arg1 = 6;  
                                mHandler.sendMessage(msg);  
                            }  
                        }, 0, 2000);  
                    } else if (mWebViewLoadTimes >= 2) {  
                        mWebViewLoadTimes = 0;  
                        String path = FlashPath.TIP_NO_FILE;  
                        Intent intent = new Intent(MainFlashActivity.this,NoFileFlashActivity.class);  
                        intent.putExtra("swfPath", path);  
                        startActivity(intent);  
                        MainFlashActivity.this.finish();  
                    }  
                }  
            });  
            //给网页文件添加Android与JS交互函数的定义  
            mWebView.addJavascriptInterface(new RunJavaScript(), "playerJs");  
            //设置网页能够获得焦点  
            mWebView.requestFocusFromTouch();  
            mWebView.requestFocus();  
            mWebView.setFocusable(true);  
            //设置完毕之后加载Flash  
            mWebView.loadUrl(swfPath);  
        }  
        //类中类:定义js中调用的Android类  
    class RunJavaScript {  
        public void runJs2Activity(String str) {  
            strFromJs = str;  
            mScriptHandler.removeCallbacks(mPlayerRunnable);  
            mScriptHandler.postDelayed(mPlayerRunnable, 300);  
        }  
    }  
     //类中接口:当js调用RunJavaScript时,新开辟线程处理消息,这里是接口   
    Runnable mPlayerRunnable = new Runnable() {  
        @Override  
        public void run() {  
            //文件操作行为  
            if (strFromJs.equals("file1_open")||strFromJs.equals("file2_open")||strFromJs.equals("file3_open")||strFromJs.equals("file4_open")||strFromJs.equals("file5_open")||strFromJs.equals("file6_open") ) {    
                File folder = new File("/mnt/external_sd/");  
                //TF卡存在  
                if(folder.length()>0){  
                  Intent intent = new Intent(MainFlashActivity.this,FileListActivity.class);  
                  intent.putExtra("filename", strFromJs);  
                  startActivity(intent);  
                  //TF卡不在  
                }else{  
                    TipDialog mTipDialog = new TipDialog(MainFlashActivity.this, R.style.IdealDialog,R.drawable.no_tf_card,3);  
                    //设置背景透明度  
                    WindowManager.LayoutParams lp=mTipDialog.getWindow().getAttributes();   
                    lp.dimAmount=0.7f;   
                    mTipDialog.getWindow().setAttributes(lp);   
                    mTipDialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);  
                    mTipDialog.show();  
                }             
            }   
        }  
    };  
       
    //加载Antivity是调用  
    @SuppressLint("Recycle") @Override  
    protected void onResume() {  
        super.onResume();  
        //flash在回到该Activity是能够继续播放  
        try {  
            mWebView.getClass().getMethod("onResume").invoke(mWebView, (Object[]) null);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }   
    }  
      
    //Activity停止时调用  
    @Override  
    protected void onPause() {  
        super.onPause();  
        //允许flash暂停播放  
        try {  
            mWebView.getClass().getMethod("onPause").invoke(mWebView, (Object[]) null);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
      
    //该Activity销毁时调用  
    @Override  
    protected void onDestroy() {  
        super.onDestroy();  
        mWebView.destroyDrawingCache();  
        mWebView.destroy();  
        try {  
            mHandler.removeMessages(0);  
            mTimer.cancel();  
        } catch (Exception e) {  
        }  
    }  
      
}  
Android加载flash时有一些要注意的问题:Webview加载flash一开始会出现白屏,可以通过刷图的形式掩盖;刚加载完flash,它还无法获得Android用户的焦点事件,必须在代码里面模拟点击屏幕,才可以获得焦点;在运行flash的过程中可能会出现焦点丢失的情况,我的方案是每隔几秒点击屏幕一次;Android加载flash需要flash插件,必须确保插件装好了,但是。即使插件装好了也不能通信,必须要把要加载的flash的路径写到flash插件安装目录下的安全路径文件中,这点非常重要,如读者遇到该问题,需要帮助的话可在线留言~

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标常用软件Flash频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程