AndroidにHTMLテンプレートに基づく方式でSWFを埋め込む
詳細
前回webviewでandoridにswfを埋め込むことを実現したのに続き、htmlテンプレートでSWFを埋め込むメリットについてお話しします.最も直感的なのはhtml、swf、androidコードをつなぎ合わせることができ、インタラクティブな操作が便利です(これで最終的なニーズは実現しませんが)コードは簡単です.コードを自分で見てみましょう
MainActivity
テンプレートもご用意しております
レイアウトファイルも
リアルタイムRTMP再生を実現するか、ネット上のオープンソースライブラリを参照して実現するか、次の記事で紹介します.
ブログアドレス:http://qiaoyihang.iteye.com/
前回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')");
}
});
}
}
}
テンプレートもご用意しております
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;
}
swf
レイアウトファイルも
リアルタイムRTMP再生を実現するか、ネット上のオープンソースライブラリを参照して実現するか、次の記事で紹介します.
ブログアドレス:http://qiaoyihang.iteye.com/