2012-02-02 3 views
7

FULLSCREEN의 webview에 삽입 된 동영상을 재생할 때 NPE가 표시됩니다. 3.0 벌집으로 잘 작동하지만 ICS 4.0 이상에서는 작동하지 않습니다. 이 문제를 어떻게 해결할 수 있습니까?전체 화면 모드로 재생되지 않는 동영상

java.lang.NullPointerException 
    at android.webkit.PluginFullScreenHolder.show(PluginFullScreenHolder.java:85) 
    at android.webkit.WebView$PrivateHandler.handleMessage(WebView.java:8849) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:137) 
    at android.app.ActivityThread.main(ActivityThread.java:4424) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:511) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
    at dalvik.system.NativeStart.main(Native Method) 

모든 의견을 보내 주시면 대단히 감사하겠습니다. 감사합니다

+1

자바를 얻을 경우 안드로이드 버그 스택 트레이스. 해결 방법이있을 수도 있고 그렇지 않을 수도 있습니다. 바라건대 미래의 ICS 릴리스에서 수정되었습니다. –

답변

1

에 한번 당신의 웹보기에 WebChromeClient를 추가 :

webView.setWebChromeClient(new WebChromeClient()); 

충돌 (나는 우리가 경험 한 것과 유사한 생각) 중지해야하지만 동영상의 재생이 얻을 것이라고 생각하지 않는 전체 화면.

이렇게하려면 다음과 같이해야한다고 생각합니다. Android ICS 4.0 Placing Flash WebView into full screen calls hideAll Method? 나는 아직도 알아 내려고하고 있습니다.

1

문제는 android OS의 버그입니다. 이 문제를 해결하려면 해결 방법이 필요합니다.
나는 똑같은 문제에 직면했다. 다음 작업을 통해 저에게 효과적이었습니다. 이 사람들을 도움이 될 것입니다
희망 :
가 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; 
     } 
    } 
} 
관련 문제