HTML 5 video crash when going fullscreen

android, android-webview, html5-video, webchromeclient, webview

Solution

When you switch the orientation the application resets it self starting with oncreate event. It doesn t just simple change the height and width and related stuff. That why you are getting a null exception one of the control you have created is not exist this time. Probably HTML5View.

What you should do is keep track of the video position and in case of switch reload all the controls according starting with the last position.

Problem

I'm currently working on an application with screen orientation portrait, and i have html 5 video that need fullscreen support. I added to the webview a WebChromeClient, overrided few methods. Everything is working fine when i stick to the portrait orientation, but when i try to switch orientation to landscape when going fullscreen, i got a crash. Any clue ? Overrided methods: ``` public void onShowCustomView(View view, CustomViewCallback callback) { super.onShowCustomView(view, callback); if (mCustomViewContainer != null) { callback.onCustomViewHidden(); return; } if(interfazWeb==null) interfazWeb = (FragTabActivity) getActivity(); if (view instanceof FrameLayout) { mCustomViewContainer = (FrameLayout) view; mCustomViewCallback = callback; interfazWeb.getCustomContentView().setVisibility(View.INVISIBLE); interfazWeb.addContentView(mCustomViewContainer, new FrameLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT, Gravity.CENTER)); interfazWeb.setBackDelegate(new BackDelegate(){ public boolean shouldOverrideBackButton() { if(mCustomViewCallback!=null){//first calling onHideCustomView() onHideCustomView(); return true; } return false; } }); mCustomViewContainer.bringToFront(); //interfazWeb.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } } @Override public void onHideCustomView() { // TODO Auto-generated method stub if(interfazWeb==null) interfazWeb = (FragTabActivity) getActivity(); if(mCustomViewContainer!=null){ ViewGroup parent = (ViewGroup) interfazWeb.getCustomContentView().getParent(); if(parent!=null){ parent.removeView(mCustomViewContainer); interfazWeb.getCustomContentView().setVisibility(View.VISIBLE); } } if(mCustomViewCallback!=null){ mCustomViewCallback.onCustomViewHidden(); mCustomViewCallback = null; } //interfazWeb.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } @Override public Bitmap getDefaultVideoPoster() { // TODO Auto-generated method stub return Bitmap.createBitmap(1, 1, Config.ARGB_8888); } @Override public View getVideoLoadingProgressView() { // TODO Auto-generated method stub return new ProgressBar((Context) getActivity()); } ``` Log says: ``` 10-31 11:09:36.336: E/AndroidRuntime(8098): java.lang.NullPointerException 10-31 11:09:36.336: E/AndroidRuntime(8098): at android.webkit.HTML5VideoView.isPlaying(HTML5VideoView.java:122) 10-31 11:09:36.336: E/AndroidRuntime(8098): at android.webkit.HTML5VideoViewProxy$VideoPlayer.isPlaying(HTML5VideoViewProxy.java:253) 10-31 11:09:36.336: E/AndroidRuntime(8098): at android.webkit.HTML5VideoViewProxy.handleMessage(HTML5VideoViewProxy.java:402) 10-31 11:09:36.336: E/AndroidRuntime(8098): at android.os.Handler.dispatchMessage(Handler.java:99) 10-31 11:09:36.336: E/AndroidRuntime(8098): at android.os.Looper.loop(Looper.java:137) 10-31 11:09:36.336: E/AndroidRuntime(8098): at android.app.ActivityThread.main(ActivityThread.java:4758) 10-31 11:09:36.336: E/AndroidRuntime(8098): at java.lang.reflect.Method.invokeNative(Native Method) 10-31 11:09:36.336: E/AndroidRuntime(8098): at java.lang.reflect.Method.invoke(Method.java:511) 10-31 11:09:36.336: E/AndroidRuntime(8098): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 10-31 11:09:36.336: E/AndroidRuntime(8098): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 10-31 11:09:36.336: E/AndroidRuntime(8098): at dalvik.system.NativeStart.main(Native Method) ``` EDIT: I have this line in my manifest: ``` android:configChanges="keyboardHidden|orientation|locale|screenLayout" ```

Original source

Related problems