9

現在、画面の向きが縦向きのアプリケーションで作業しています。フルスクリーンサポートが必要なhtml 5ビデオがあります。私はwebviewにWebChromeClientを追加し、いくつかのメソッドをオーバーライドしました。私はポートレートの向きに固執するとすべてがうまくいきますが、フルスクリーンにするときに向きを横に切り替えるとクラッシュします。どんな手掛かり ?フルスクリーン表示時にHTML 5ビデオがクラッシュする

オーバーライドメソッド:

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) 

EDIT:私は私のマニフェストに次の行を持っている:

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

私はこの問題を解決するのを手伝ってもらえますか?[問題](http://stackoverflow.com/questions/14156411/loading-youtube-video-through-i-frame-in-android-webview) – edwin

+2

私はまったく同じです問題はありますが、ギャラクシーS3だけを押して戻ると(フルスクリーンを終了するため) – Pauland

+0

@Paulandこの問題の解決策はありますか? S3でもこの問題が発生しています。手伝ってくれませんか? – Noundla

答えて

0

あなたはオリエンテーションにアプリケーションを切り替えるとそれはoncreateイベントから始まって自己にリセットされます。それは単純に高さと幅と関連するものを変更しません。あなたが作成したコントロールの1つにnull例外が発生しているのは、今回は存在しません。おそらくHTML5View。

あなたがすべきことは、ビデオの位置を把握し、最後の位置から順番にスイッチを再ロードすることです。

+0

私は現在、活動レベルでプログラムによる方向変更を処理しています。だから、破壊されて再現されるはずがない –

+0

あなたはOnurと言ったように、私は状態を保持し、設定の変更を処理しているにもかかわらず、オリエンテーションの変更中にすべてが破壊されます。私は、他のアプリのソースコードで、この部分をどのように処理したのかを知るためには、ダイビングする必要があると思います。私はちょうどデフォルトのウェブブラウザよりも簡単な例を見つけることを望む。 –

+0

すべてのコントロールを元に戻すにはどうすればいいですか?あなたは賛成できますか? –

0

あなたの活動にこれを追加することによって、マニフェストからの向きの変更を処理しようとすることができます

android:configChanges="orientation|screenLayout" 

私は同じ問題を抱えているために使用されるが、これは私のために働きました。

+0

さて、元の質問ではなく、マニフェストで言及した属性を設定していない限り、方向変更をプログラム的に処理しているとは言えません。だから多分このアプローチを試すことができます。 – Gonan

関連する問題