2012-02-02 56 views
7

Tôi nhận được NPE khi cố gắng phát video được nhúng trong chế độ xem web trong FULLSCREEN. Nó hoạt động tốt với 3.0 tổ ong nhưng không phải với ICS 4.0+. Bất kỳ ý tưởng làm thế nào điều này có thể được giải quyết?Video không phát ở chế độ toàn màn hình

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) 

Bất kỳ đề xuất nào cũng sẽ thực sự được đánh giá cao. Cảm ơn

+1

Nếu bạn nhận được Java stacktrace đó là lỗi Android. Bạn có thể hoặc có thể không có cách giải quyết, rất có thể là không. Hy vọng rằng cố định trong bản phát hành ICS trong tương lai. –

Trả lời

1

Hãy thử thêm một WebChromeClient để WebView của bạn:

webView.setWebChromeClient(new WebChromeClient()); 

Điều đó sẽ ngăn chặn sự sụp đổ (tôi nghĩ nó tương tự như những gì chúng tôi đã trải qua) nhưng tôi không nghĩ rằng nó sẽ có được những video để chơi trong toàn màn hình.

Để làm điều đó tôi nghĩ bạn sẽ phải làm một cái gì đó như thế này: Android ICS 4.0 Placing Flash WebView into full screen calls hideAll Method? Mà tôi vẫn đang cố gắng tìm ra.

1

Sự cố là lỗi trong hệ điều hành Android. Bạn cần một công việc xung quanh để giải quyết vấn đề này.
Tôi đang đối mặt với cùng một vấn đề. Công việc sau đây xung quanh làm việc cho tôi.
Hy vọng điều này sẽ giúp một số người:
Tạo FullscreenableChromeClient và thêm dòng này:

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; 
     } 
    } 
} 
Các vấn đề liên quan