Android 全屏播放时HTML 5视频崩溃

Android 全屏播放时HTML 5视频崩溃,android,webview,android-webview,html5-video,webchromeclient,Android,Webview,Android Webview,Html5 Video,Webchromeclient,我目前正在开发一个具有屏幕方向肖像的应用程序,我有需要全屏支持的HTML5视频。我在webview中添加了一个WebChromeClient,覆盖了几个方法。当我坚持纵向时,一切都很好,但是当我全屏时尝试将方向切换到横向时,我遇到了一个崩溃。有线索吗 重写的方法: public void onShowCustomView(View view, CustomViewCallback callback) { super.onShowCustomView(view, callback);

我目前正在开发一个具有屏幕方向肖像的应用程序,我有需要全屏支持的HTML5视频。我在webview中添加了一个WebChromeClient,覆盖了几个方法。当我坚持纵向时,一切都很好,但是当我全屏时尝试将方向切换到横向时,我遇到了一个崩溃。有线索吗

重写的方法:

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());
        }
日志说:

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)
编辑:我的清单中有这一行:

android:configChanges="keyboardHidden|orientation|locale|screenLayout"

当您切换方向时,应用程序将使用oncreate事件自启动重置方向。它不仅仅是简单地改变高度和宽度以及相关的东西。这就是为什么您会得到一个空异常,您创建的一个控件这次不存在。可能是HTML5视图


您应该做的是跟踪视频位置,在切换的情况下,从最后一个位置开始重新加载所有控件。

您可以尝试通过将以下内容添加到活动中来处理清单中的方向更改:

android:configChanges="orientation|screenLayout"

我以前也遇到过同样的问题,但这对我很有效。

我目前正在以编程方式在活动级别处理方向更改。所以它不应该被破坏和重新创建正如你说的,在方向改变的过程中,一切都被破坏了,尽管我保留了状态并处理配置的改变。我想我必须深入研究另一个应用程序源代码,以了解他们是如何处理这一部分的。我只是希望找到一个比默认web浏览器更简单的示例。我如何重新加载所有控件。你能帮我解决这个问题吗?我有完全相同的问题,但只有在galaxy S3上,当你按back(退出全屏)时,@Pauland你找到这个问题的解决方案了吗?我在S3中也遇到了这个问题。你能帮我吗?@noundla是的,我的旧代码(已解决)如果我记得,prb是用onBackPressed函数解决的。我想我在这里解决了:嗯,你提到——不是在最初的问题中——你正在以编程方式处理方向更改,这在任何情况下都不应该起作用,除非你正在设置我在清单中提到的属性。所以也许你可以试试这种方法。