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