继上一篇
利用webview实现在andorid中嵌入swf
这篇继续说说通过html模板的方式来嵌入SWF,这样做的好处最直观的就是可以把html,swf和android代码串起来,交互操作很方便(虽然这样最后没实现我最终的需求)
代码比较简单,上代码自己看吧
MainActivity
package com.example.flashdemo;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.webkit.JsResult;
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;
public class MainActivity extends Activity {
private FrameLayout mFullscreenContainer;
private FrameLayout mContentView;
private View mCustomView = null;
private WebView mWebView;
private Handler mHandler = new Handler();
private ProgressDialog mProgressDialog;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViews();
initWebView();
if (getPhoneAndroidSDK() >= 14) {// 4.0需打开硬件加速
getWindow().setFlags(0x1000000, 0x1000000);
}
mWebView.addJavascriptInterface(new DemoJavaScriptInterface(), "demo");
mWebView.loadUrl("file:///android_asset/videoTem.html");
// mWebView.loadUrl("file:///android_asset/NewSampleClient.html");
}
private void initViews() {
mFullscreenContainer = (FrameLayout) findViewById(R.id.fullscreen_custom_content);
mContentView = (FrameLayout) findViewById(R.id.main_content);
mWebView = (WebView) findViewById(R.id.webview_player);
//如果webView中需要用户手动输入用户名、密码或其他,则webview必须设置支持获取手势焦点。
mWebView.requestFocusFromTouch();
}
private void initWebView() {
WebSettings settings = mWebView.getSettings();
//设置此属性,可任意比例缩放
settings.setUseWideViewPort(true);//将图片调整到适合webview的大小
settings.setLoadWithOverviewMode(true);
//打开页面时, 自适应屏幕:
settings.setBuiltInZoomControls(true);
settings.setSupportZoom(true);//支持缩放
settings.setJavaScriptEnabled(true);//支持js
settings.setJavaScriptCanOpenWindowsAutomatically(true);
settings.setPluginState(PluginState.ON);
settings.setPluginsEnabled(true);//支持插件
settings.setAllowFileAccess(true);
mProgressDialog=ProgressDialog.show(this, "请稍等...", "加载flash中...", true);
mWebView.setWebChromeClient(new MyWebChromeClient());
mWebView.setWebViewClient(new MyWebViewClient());
}
class MyWebChromeClient extends WebChromeClient {
private CustomViewCallback mCustomViewCallback;
private int mOriginalOrientation = 1;
@Override
public void onShowCustomView(View view, CustomViewCallback callback) {
// TODO Auto-generated method stub
onShowCustomView(view, mOriginalOrientation, callback);
super.onShowCustomView(view, callback);
}
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
final AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
builder.setTitle("OA提示信息")
.setMessage(message)
.setPositiveButton("确定", null)
.setCancelable(false)
.create()
.show();
result.confirm();
return true;
}
@Override
public void onProgressChanged(WebView view, int newProgress) {
// TODO Auto-generated method stub
super.onProgressChanged(view, newProgress);
System.out.println("newProgress:"+String.valueOf(newProgress));
if(newProgress==100){
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
mProgressDialog.dismiss();
}
}, 500);
}
}
@SuppressLint("Override")
public void onShowCustomView(View view, int requestedOrientation,
WebChromeClient.CustomViewCallback callback) {
if (mCustomView != null) {
callback.onCustomViewHidden();
return;
}
if (getPhoneAndroidSDK() >= 14) {
mFullscreenContainer.addView(view);
mCustomView = view;
mCustomViewCallback = callback;
mOriginalOrientation = getRequestedOrientation();
mContentView.setVisibility(View.INVISIBLE);
mFullscreenContainer.setVisibility(View.VISIBLE);
mFullscreenContainer.bringToFront();
setRequestedOrientation(mOriginalOrientation);
}
}
public void onHideCustomView() {
mContentView.setVisibility(View.VISIBLE);
if (mCustomView == null) {
return;
}
mCustomView.setVisibility(View.GONE);
mFullscreenContainer.removeView(mCustomView);
mCustomView = null;
mFullscreenContainer.setVisibility(View.GONE);
try {
mCustomViewCallback.onCustomViewHidden();
} catch (Exception e) {
}
// Show the content view.
setRequestedOrientation(mOriginalOrientation);
}
}
class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return super.shouldOverrideUrlLoading(view, url);
}
}
public static int getPhoneAndroidSDK() {
int version = 0;
try {
version = Integer.valueOf(android.os.Build.VERSION.SDK);
} catch (NumberFormatException e) {
e.printStackTrace();
}
return version;
}
final class DemoJavaScriptInterface {
DemoJavaScriptInterface() {
}
/**
* This is not called on the UI thread. Post a runnable to invoke
* loadUrl on the UI thread.
*/
public void clickOnAndroid() {
mHandler.post(new Runnable() {
public void run() {
mWebView.loadUrl("javascript:wave('111','192.168.0.28')");
}
});
}
}
}
模板也提供一下
<script>
function getPolicyNo()
{
alert(111);
//var policyNo = policyNodocument.getElementById("policyNo").value;
//return policyNo;
}
function getPrimaryServerIp()
{
//var primaryServerIp = document.getElementById("primaryServerIp").value
//alert(primaryServerIp);
//return primaryServerIp;
}
function wave(policyNo,primaryServerIp) {
document.getElementById("policyNo").value = policyNo;
document.getElementById("primaryServerIp").value = primaryServerIp;
}
</script>
<html>
<head>
<meta charset="utf-8" />
<title>swf</title>
</head>
<body onload="window.demo.clickOnAndroid()">
<embed src="NewSampleClient.swf"
bgcolor="#000000" width="80%" height="80%" align="middle"
allowScriptAccess="always" allowFullScreen="true" wmode="transparent"
type="application/x-shockwave-flash"> </embed>
<input type="hidden" id="policyNo" value="" />
<input type="hidden" id="primaryServerIp" value="" />
</body>
</html>
布局文件也弄一下
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/fullscreen_custom_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone" />
<FrameLayout
android:id="@+id/main_content"
android:layout_width="match_parent"
android:layout_height="match_parent">
<WebView
android:id="@+id/webview_player"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="horizontal" />
</FrameLayout >
</FrameLayout>
最新实现实时RTMP播放还是参照网上的一个开源库实现的,这个在下一篇介绍
博客地址:http://qiaoyihang.iteye.com/
分享到:
相关推荐
虽然html在大家的生活中,随处可见,但在html中嵌入swf动画,有的同学还是不会。这里教大家在html中嵌入动画的。
HTML 嵌入 Flex SWF 是一种在网页中集成 Adobe Flex 生成的 Flash 动态内容的技术。Flex 是一个用于构建富互联网应用程序(RIA)的框架,它基于 ActionScript 和 MXML,允许开发者创建交互性强、用户体验良好的动态...
2. **HTML嵌入代码**:在HTML中,我们可以使用以下方式嵌入SWF文件: ```html ,0,0,0" width="550" height="400"> <param name="movie" value="path_to_your_swf_file.swf" /> <embed src="path_to_your_swf_...
在Android开发中,将本地HTML嵌入到应用中是一个常见的需求,这主要通过使用WebView组件来实现。WebView是Android提供的一种用于展示网页内容的控件,它可以加载远程或本地的HTML资源,使得开发者可以在Android应用...
通过集成Air SDK,开发者可以使用ActionScript开发SWF文件,并在Android应用中嵌入。安装Air SDK后,使用Flash Builder或An ActionScript IDE如IntelliJ IDEA,可以将SWF项目打包为Android应用。 2.第三方库:...
3. **处理交互**:通过JavaScript与SWF对象通信,可以监听和响应SWF中的事件,或者传递数据给SWF。 4. **安全考虑**:由于Flash的安全漏洞和隐私问题,确保SWF内容来自可信源,并且更新到最新版本是非常重要的。 在...
本文将详细介绍如何将 CocosCreator 项目嵌入到原生 Android 项目中,包括编译 CocosCreator 项目、配置 Android 项目、添加libcocos2dx依赖模板、设置依赖模块、启动Cocos2dx等步骤。 一、编译 CocosCreator 项目 ...
在Android项目中嵌入Cocos2dx项目是一个常见的需求,特别是在开发混合式游戏或应用时。Cocos2dx是一款高效的游戏开发框架,它基于C++,同时提供了Java、Objective-C和Swift的接口,使得开发者可以方便地在Android和...
在HTML中,`<object>` 或 `<embed>` 标签可以用来嵌入SWF文件。 2. **CSS**:CSS(Cascading Style Sheets)用于控制网页的样式和布局。通过CSS,可以调整播放器的外观,如边框、背景色、尺寸等。 3. **JavaScript...
在Android项目中嵌入ReactNative是一项常见的跨平台开发技术,它允许开发者利用JavaScript和React库来构建原生的Android应用。ReactNative是由Facebook推出的开源框架,它的核心理念是“Learn once, write anywhere...
在Android开发中,有时我们需要将Web内容嵌入到应用程序中,这时`WebView`是一个常见的选择。`WebView`不仅可以展示HTML页面,还能实现Android原生Java代码与HTML中的JavaScript交互,从而实现更丰富的功能。本教程...
SWFObject.js是一个JavaScript库,专门用于在HTML页面中无缝地嵌入Adobe Flash内容,如SWF文件。这种技术在过去的网页设计中非常流行,因为Flash可以提供动态交互和丰富的媒体体验。以下是对SWFObject.js及其应用的...
本教程将探讨如何在Android中自定义一个美观的Dialog,并在其内部嵌入一个ListView,以便展示更多信息。这个自定义Dialog可以用于显示一系列可选项目,用户可以通过点击ListView中的条目来进行交互。 首先,我们...
在Android开发中,嵌入Lua是一种常见的技术,用于实现动态脚本、游戏逻辑或扩展应用程序功能。这篇博文链接指向了作者obacow在iteye博客上分享的一篇关于Android嵌入Lua的文章。从标题和标签我们可以推测,这篇文章...
在Android平台上,外接基于UVC(Universal Video Class)协议的摄像头并实现预览功能是一项技术挑战,但通过一些特定的API和库可以实现。UVC协议是USB设备类定义的一部分,它允许USB设备(如摄像头)以统一的方式与...
在代码.htm或code.html中,可能有嵌入SWF文件的`<object>`或`<embed>`标签,JS会根据需要切换这些标签的可见性或更换其src属性,以实现连播。 2. **事件监听**:JS可以监听SWF文件的特定事件,如播放结束。当一个...
总结,通过以上方式,我们可以将Flex应用灵活地嵌入到HTML页面中,提升Web应用的交互性和功能性。在实际开发中,还需要根据项目需求和目标浏览器的兼容性来选择合适的嵌入方法。同时,深入理解IFrame.as中的代码可以...
标题中的“基于DWT的音频数字水印嵌入算法”是指使用离散小波变换(Discrete Wavelet Transform,简称DWT)技术在音频信号中嵌入数字水印的算法。这种技术是数字水印领域的一个重要应用,主要用于音频版权保护、原始...
在HTML文件中嵌入Flash视频,通常涉及到两种主要的文件格式:FLV和SWF。这两种格式各有特点,适用于不同的应用场景。 FLV(Flash Video)文件是基于图像的视频流和音频格式,适合实时流媒体服务。由于其流式传输...
在HTML页面中嵌入并播放Flash动画.SWF文件是一个常见的需求,特别是在早期的网页设计中,Flash被广泛用于创建交互式内容和动态图形。这里我们将详细介绍如何实现这一目标,并涉及与SWF文件相关的HTML和Flash基础知识...