android 4.0中关于webview加载flash并使flash全屏的问题(附demo)

android2.1及之前的版本是不支持flash的。


android2.2开始之后开始支持flash。要使用webview加载flash首先手机应该安装flash插件;

其次应该设置

webSettings = mWebView.getSettings();

webSettings.setJavaScriptEnabled(true);

webSettings.setPluginsEnabled(true);

android4.0要加载flash的话还需要开启硬件加速。


。。。

问题出来了,4.0加载flash确实可以正常播放,但是当你点击flash中的全屏按钮时,要么画面卡住要么有声音没画面。这确实是一个很蛋疼的问题。为什么会出现这个问题呢?经过一番研究发现时4.0中修改了相关代码导致全屏时出现问题。

讲到这里还要稍稍了解一下flash相关的知识。由于对flash研究也不是很深,讲个大概意思就好。flash正常大小在webview中显示是没有问题的。但是点击全屏按钮后flash会有一个全屏的界面,而这个全屏界面与正常大小的界面并不是显示在同一个view中。相当于有两个view,分别装载一般大小和全屏的界面。


4.0中修改了装载全屏界面这个view的显示状态,所以会导致全屏时界面无或者卡住的问题。

知道原因后要解决这个问题就好办了。下面是解决方案:

mWebView.setWebChromeClient(new WebChromeClient(){
	public void onShowCustomView(View view, int requestedOrientation,
				WebChromeClient.CustomViewCallback callback) {
			if (mCustomView != null) {
				callback.onCustomViewHidden();
				return;
			}
			if (PhoneInfo.getPhoneAndroidSDK() >= 14) {
				mFullscreenContainer.addView(view);
				mCustomView = view;
				mCustomViewCallback = callback;
				mOriginalOrientation = getRequestedOrientation();
				mContentView.setVisibility(View.INVISIBLE);
				mFullscreenContainer.setVisibility(View.VISIBLE);
				mFullscreenContainer.bringToFront();

				setRequestedOrientation(requestedOrientation);
			}

		}

		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);
		}
});

 

附DEMO地址:FlashDemo.rar

你可能感兴趣的:(android)