2012-08-11 82 views
2

我正在构建一个应用程序,它依靠能够在WebView中播放Flash并在发现所有内容均按预期工作,直到Flash视频全屏显示。当请求全屏时,屏幕变黑,音频持续约5秒钟。当全屏闪光灯打开时Android WebView空白 - ICS 4.0

我最初发现屏幕变白了,但在下面的文章中调整了解决方案,它已经移动了目标文章。 Android ICS 4.0 Placing Flash WebView into full screen calls hideAll Method?

final WebView mWebView = (WebView)findViewById(R.id.webview); 
    WebSettings webSettings = mWebView.getSettings(); 
    webSettings.setPluginState(WebSettings.PluginState.ON); 
    webSettings.setJavaScriptEnabled(true); 
    mWebView.requestFocusFromTouch(); 
    mWebView.setWebViewClient(new WebViewClient()); 

    mWebView.setWebChromeClient(new WebChromeClient(){ 
     public void onShowCustomView(View view, int requestedOrientation, WebChromeClient.CustomViewCallback callback){ 
      super.onShowCustomView(view, callback); 
      if(Build.VERSION.SDK_INT >=14) { 
       if (view instanceof FrameLayout) {     
        mWebView.addView(view, new FrameLayout.LayoutParams(
        ViewGroup.LayoutParams.MATCH_PARENT, 
        ViewGroup.LayoutParams.MATCH_PARENT, 
        Gravity.CENTER));     
        mWebView.setVisibility(View.VISIBLE); 
       } 
      } 
     } 
    }); 

当全屏Flash视频开始我看到的logcat以下。

08-11 15:09:47.435:V/VideoSurfaceView(23871):surfaceCreated

08-11 15:09:47.435:V/VideoSurfaceView(23871):surfaceChanged格式= 842094169,宽度= 480, height = 690

以下答案引用了从浏览器实现类似于BaseUI类的onShowCustomView。有一个名为showCustomView的非常类似的方法,我试图绕过我的代码来添加BaseUI类的内容,并且令人惊讶的是我设法让我的代码编译和运行,但它没有造成任何区别。

flash player crashes when trying to enter fullscreen mode android 4.0

预先感谢想法和帮助....

回答

2

后一些更多的挖我已经回答了我的问题,这让我感动到下一组的问题,我会发布作为单独的问题。

只要Flash不请求方向更改,以下代码将全屏显示来自webView的Flash。它还会中断源webView,因为在排除故障“指定的子项已有父项”后,我不得不添加removeAllViews()方法。

而且具有实现的WebView作为最终允许从覆盖的WebChromeClient方法获得突破需要访问此网页视图

public void startWebView(String url){ 
    final WebView mWebView = (WebView)findViewById(R.id.webview); 
    final Context ctx = this; 
    WebSettings webSettings = mWebView.getSettings(); 
     webSettings.setBuiltInZoomControls(true); 
     webSettings.setPluginState(WebSettings.PluginState.ON); 
     webSettings.setJavaScriptEnabled(true); 
     webSettings.setLoadWithOverviewMode(true); 

     mWebView.requestFocusFromTouch(); 
     mWebView.setWebViewClient(new WebViewClient()); 

     mWebView.setWebChromeClient(new WebChromeClient(){ 
      protected WebView tempView; 
      public void onShowCustomView(View view, int requestedOrientation, WebChromeClient.CustomViewCallback callback){ 
       super.onShowCustomView(view, callback); 
       if(Build.VERSION.SDK_INT >=14) { 
        if (view instanceof FrameLayout) {     
         mWebView.addView(view, new FrameLayout.LayoutParams(
         ViewGroup.LayoutParams.MATCH_PARENT, 
         ViewGroup.LayoutParams.MATCH_PARENT, 
         Gravity.CENTER));     
         mWebView.setVisibility(View.VISIBLE); 
        } 
       } 

       if (mCustomView != null) { 
        callback.onCustomViewHidden(); 
        return; 
       } 

       mOriginalOrientation = activity.getRequestedOrientation(); 
       FrameLayout decor = (FrameLayout) activity.getWindow().getDecorView(); 
       mWebView.setVisibility(View.INVISIBLE); 
       mFullscreenContainer = new FullscreenHolder(ctx); 
       mWebView.removeAllViews(); 
       mFullscreenContainer.addView(view, COVER_SCREEN_PARAMS); 
       decor.addView(mFullscreenContainer, COVER_SCREEN_PARAMS); 
       mCustomView = view; 
       setFullscreen(true); 

       mCustomViewCallback = callback; 
       activity.setRequestedOrientation(requestedOrientation); 

      } 


      public void onHideCustomView() { 
       if(debug==true)Log.d(name,"onHide start"); 
       mWebView.setVisibility(View.VISIBLE); 


       if(debug==true)Log.d(name,"onHide "); 
       if (mCustomView == null) 
        return; 
       setFullscreen(false); 
       FrameLayout decor = (FrameLayout) activity.getWindow().getDecorView(); 
       decor.removeView(mFullscreenContainer); 
       mFullscreenContainer = null; 
       mCustomView = null; 
       mCustomViewCallback.onCustomViewHidden(); 
       if(debug==true)Log.d(name,"onHide callback"); 
       // Show the content view. 
       activity.setRequestedOrientation(mOriginalOrientation); 
       if(debug==true)Log.d(name,"onHide set orientation"); 
       mWebView.loadUrl("http://crooksandliars.com/susie-madrak/scott-brown-cries-over-poor-people-ge"); 
       if(debug==true)Log.d(name,"onHide start webview"); 
      } 



      public void setFullscreen(boolean enabled) { 
       Window win = activity.getWindow(); 
       WindowManager.LayoutParams winParams = win.getAttributes(); 
       final int bits = WindowManager.LayoutParams.FLAG_FULLSCREEN; 
       if (enabled) { 
        winParams.flags |= bits; 
       } else { 
        winParams.flags &= ~bits; 
        if (mCustomView != null) { 
         mCustomView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE); 
        } else { 
         mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE); 
        } 
       } 
       win.setAttributes(winParams); 
      } 
     }); 

     mWebView.loadUrl(url); 
} 



    static class FullscreenHolder extends FrameLayout { 

     public FullscreenHolder(Context ctx) { 
      super(ctx); 
      setBackgroundColor(00000); 
     } 

     @Override 
     public boolean onTouchEvent(MotionEvent evt) { 
      return true; 
     } 
    } 
任何其他方法