9

私は現在、画面の向きが縦向きのアプリケーションに取り組んでおり、フルスクリーンのサポートが必要な html 5 ビデオがあります。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"
4

2 に答える 2

0

これをアクティビティに追加することで、マニフェストからの向きの変更の処理を試すことができます。

android:configChanges="orientation|screenLayout"

以前は同じ問題がありましたが、これでうまくいきました。

于 2013-01-19T18:35:37.110 に答える
0

方向を切り替えると、アプリケーションは oncreate イベントから開始して自己をリセットします。高さと幅、および関連するものを単純に変更するだけではありません。そのため、作成したコントロールの 1 つが今回は存在しません。おそらくHTML5Viewです。

あなたがすべきことは、ビデオの位置を追跡し、スイッチの場合は最後の位置から始めてすべてのコントロールをリロードすることです.

于 2012-10-31T11:39:59.337 に答える