android播放swf文件
16lz
2021-01-23
虽然Adobe已经宣称不再支持android下的flash播放了,但是在HTML5没有热火起来之前还是有许多地方需要用到flash的,比如希望在android机子上使用以前flash制作的一些游戏或者教学动画。这里写了个demo使用android的WebView控件和Adobe的flash插件来播放本地的卡丁车的swf文件,在android机子上插上USB键盘就可以在android平台机子上玩了。
首先上个播放的效果图
代码架构
布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity" > <WebView android:id="@+id/flashwebview" android:layout_width="fill_parent" android:layout_height="fill_parent" /></LinearLayout>源代码
package com.example.flashplayer;import java.util.List;import android.net.Uri;import android.os.Bundle;import android.os.Handler;import android.app.Activity;import android.app.ProgressDialog;import android.content.Intent;import android.content.pm.PackageInfo;import android.content.pm.PackageManager;import android.graphics.Color;import android.view.Menu;import android.webkit.WebChromeClient;import android.webkit.WebSettings.PluginState;import android.webkit.WebView;import android.widget.ProgressBar;public class MainActivity extends Activity {private WebView mWebView;private Handler mHandler=new Handler();private String mFlashFilename;private ProgressDialog mProgressDialog;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mWebView=(WebView)findViewById(R.id.flashwebview);setTitle("flash播放器");setTitleColor(Color.RED);mWebView.getSettings().setPluginsEnabled(true);mWebView.getSettings().setPluginState(PluginState.ON);Intent intent = getIntent();String str = intent.getStringExtra("flashName");if(str==null)mFlashFilename=new String("file:///android_asset/kaka.swf");elsemFlashFilename=str;try {Thread.sleep(500);// 主线程暂停下,否则容易白屏,原因未知} catch (InterruptedException e) {// TODO 自动生成的 catch 块e.printStackTrace();}mProgressDialog=ProgressDialog.show(this, "请稍等...", "加载flash中...", true);mWebView.setWebChromeClient(new WebChromeClient(){@Overridepublic void onProgressChanged(WebView view, int newProgress) {// TODO Auto-generated method stubsuper.onProgressChanged(view, newProgress);System.out.println("newProgress:"+String.valueOf(newProgress));if(newProgress==100){new Handler().postDelayed(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubmProgressDialog.dismiss();}}, 500);}}});if(checkinstallornotadobeflashapk()){mWebView.loadUrl(mFlashFilename);}else{installadobeapk();}}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.activity_main, menu);return true;}//退出时关闭flash播放@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();mWebView.destroy();this.finish();System.gc();}//按下Back按键时关闭flash播放@Overridepublic void onBackPressed() {// TODO Auto-generated method stubmWebView.destroy();this.finish();System.gc();super.onBackPressed();}//后台运行@Overrideprotected void onUserLeaveHint() {// TODO Auto-generated method stubmWebView.destroy();this.finish();System.gc();super.onUserLeaveHint();}//检查机子是否安装的有Adobe Flash相关APK private boolean checkinstallornotadobeflashapk() {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;}//安装Adobe Flash APKprivate void installadobeapk() {mWebView.addJavascriptInterface(new AndroidBridge(), "android");mWebView.loadUrl("file:///android_asset/go_market.html");}private class AndroidBridge {public void goMarket() {mHandler.post(new Runnable() {public void run() {Intent installIntent = new Intent("android.intent.action.VIEW");installIntent.setData(Uri.parse("market://details?id=com.adobe.flashplayer"));startActivity(installIntent);}});}}}PS:需要在android机子上安装Adobe_Flash_Player_11.1.112.61.apk,android系统版本是4.0.3。
完整工程可以发邮件给229425962@qq.com索取。
更多相关文章
- Android实现OCR扫描识别数字图片之图片扫描识别
- Android -- Layout布局文件里的android:layout_height等属性为什
- sdcardFS(android sdcard存储方案---基于wrapfs文件系统)
- 【Android Training - 04】保存数据 [ Lesson 2 - 保存文件]
- Android 选择图片、上传图片之PictureSelector
- Android的支持库 && app/apk包进系统 && 预置so库进系统 && 预置
- Android mainfest文件 android属性 汇总
- [Android] 将Android工程做成jar包和资源文件
- Android wps文件下载、预览