2011-12-28 4 views
2

blip.tv 및 기타 다양한 플래시 지원 웹 사이트에서 비디오를 재생하는 Android 앱을 만들었습니다. 비디오를 표시하려면 Webview을 사용하십시오.전체 화면 모드로 들어갈 때 플래시 플레이어가 충돌 함 4.0

try{ 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     getWindow().addFlags(LayoutParams.FLAG_KEEP_SCREEN_ON); 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 


     view = new WebView(this); 
     view.getSettings().setPluginsEnabled(true); 
     view.getSettings().setPluginState(WebSettings.PluginState.ON); 

     view.getSettings().setJavaScriptEnabled(true); 
     view.getSettings().setLoadWithOverviewMode(true); 
     view.getSettings().setUseWideViewPort(true); 
     view.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); 
     view.setScrollbarFadingEnabled(true); 


     // get the html code 
     String html = getIntent().getStringExtra("VIDEO_CONTENT"); 

     view.loadData(html, "text/html", null); 
     setContentView(view); 
    } 
    catch(Exception e){ 

    } 

문제는 안드로이드 4 (아이스크림 샌드위치)에 있습니다 : 여기 내 코드입니다. 앱을 전체 화면 모드로 설정하려고하면 앱이 다운됩니다. 응용 프로그램은 안드로이드 2.3 또는 3.0 그러나 충돌하지 않습니다. 이 문제를 해결할 수있는 아이디어가 있습니까?

답변

1

플래시가 전체 화면 모드로 전환 될 때 browserdolphin mini과 같은 다른 앱이 충돌하기 때문에 이것이 안드로이드 4.0.2/플래시 플레이어 문제라고 생각합니다.

4

전체 화면 모드로 이동할 때 android.webkit.PluginFullScreenHoldershow() 메서드가 호출되기 때문에 ICS에서 발생합니다. 이 방법은 다음을 수행합니다

WebChromeClient client = mWebView.getWebChromeClient(); 
client.onShowCustomView(mLayout, mOrientation, mCallback); 

당신이 당신의 WebViewWebChromeClient을 설정하지 않으면, 당신은 NPE를 얻을 것이다.

Google의 오류가 수정되었지만 WebView가 사라지고 전체 화면 비디오가 표시되지 않습니다.

참조 : Android ICS 4.0 Placing Flash WebView into full screen calls hideAll Method?

*** 업데이트 : 나는 유사한 방식으로 내 WebChromeClientonShowCustomView() 메소드를 구현했다

궁극적 위해 전체 화면 모드에서 내 WebView 재생 플래시 비디오를 얻을 수 있습니다 안드로이드 브라우저의 소스 코드에서 수행 된 작업에 이르기까지. 내가 영감을 얻기 위해 사용되는 방법의 구현은 BaseUI 클래스에서였다

https://github.com/android/platform_packages_apps_browser/blob/master/src/com/android/browser/BaseUi.java

내가 완전히 여기에 무슨 일이 일어나고 정확히 이해하지 않습니다. ICS 개발자가이 방법을 구현해야하는 이유가 무엇인지 이해하기를 바랍니다. 나는 가치를 알고 있었으면 좋겠다. 아니면 어떤 문제가 해결 되었으면한다. 이전 버전에서는이 전체 화면 모드가 "방금 작동했습니다"이제는 많은 파기가 필요합니다.

+0

쿨 덕분에 나는이 시도주지. – Darcy

+2

해결책을 공유해 주 시겠어요? 감사합니다. – user634545

2

나는 똑같은 문제에 직면했다. 나는 나를 위해 일하는 다음과 같은 대답을 물었습니다. 이 사람들을 도움이 될 것입니다
희망 :
가 FullscreenableChromeClient를 만들고 이 줄을 추가 :

WebView.setWebChromeClient(new FullscreenableChromeClient(this)); 


public class FullscreenableChromeClient extends WebChromeClient { 
     protected Activity mActivity = null; 

     private View mCustomView; 
     private WebChromeClient.CustomViewCallback mCustomViewCallback; 
     private int mOriginalOrientation; 

     private FrameLayout mContentView; 
     private FrameLayout mFullscreenContainer; 

     private static final FrameLayout.LayoutParams COVER_SCREEN_PARAMS = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); 

     public FullscreenableChromeClient(Activity activity) { 
      this.mActivity = activity; 
     } 

     @Override 
     public void onShowCustomView(View view, int requestedOrientation, WebChromeClient.CustomViewCallback callback) { 
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { 
       if (mCustomView != null) { 
        callback.onCustomViewHidden(); 
        return; 
       } 

       mOriginalOrientation = mActivity.getRequestedOrientation(); 
       FrameLayout decor = (FrameLayout) mActivity.getWindow().getDecorView(); 
       mFullscreenContainer = new FullscreenHolder(mActivity); 
       mFullscreenContainer.addView(view, COVER_SCREEN_PARAMS); 
       decor.addView(mFullscreenContainer, COVER_SCREEN_PARAMS); 
       mCustomView = view; 
       setFullscreen(true); 
       mCustomViewCallback = callback; 
       mActivity.setRequestedOrientation(requestedOrientation); 
      } 

      super.onShowCustomView(view, requestedOrientation, callback); 
     } 

     @Override 
     public void onHideCustomView() { 
      if (mCustomView == null) { 
       return; 
      } 

      setFullscreen(false); 
      FrameLayout decor = (FrameLayout) mActivity.getWindow().getDecorView(); 
      decor.removeView(mFullscreenContainer); 
      mFullscreenContainer = null; 
      mCustomView = null; 
      mCustomViewCallback.onCustomViewHidden(); 
      mActivity.setRequestedOrientation(mOriginalOrientation); 
     } 

     private void setFullscreen(boolean enabled) { 
      Window win = mActivity.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); 
     } 

     private static class FullscreenHolder extends FrameLayout { 
      public FullscreenHolder(Context ctx) { 
       super(ctx); 
       setBackgroundColor(ctx.getResources().getColor(android.R.color.black)); 
      } 

      @Override 
      public boolean onTouchEvent(MotionEvent evt) { 
      return true; 
     } 
    } 
} 
+1

위 코드로 마침내 플래시 재생 동영상을 전체 화면으로 만들었습니다. –

관련 문제