AndroidにHTMLテンプレートに基づく方式でSWFを埋め込む


詳細
前回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/