9

我目前正在與屏幕方向的肖像應用程序,我有HTML 5視頻,需要全屏支持。我在webview中添加了一個WebChromeClient,重寫了幾個方法。當我堅持縱向定位時,一切正常,但當我嘗試在全屏時切換方向爲風景時,我發生了故障。任何線索?HTML 5視頻崩潰時全屏

Overrided方法:

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" 
+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事件。它不僅僅是簡單地改變高度和寬度以及相關的東西。那爲什麼你得到一個空的異常,你創建的控件之一不存在這次。可能是HTML5View。

你應該做的是跟蹤視頻的位置,並在開關的情況下重新加載所有的控件從最後一個位置開始。

+0

我目前正在處理活動級別的編程方向更改。所以它不應該被破壞並重新創建 –

+0

正如你所說的Onur,儘管我保持狀態並處理配置更改,但在定向更改期間,一切都被破壞了。我想我將不得不在另一個應用程序源代碼中查找他們如何處理這部分。我只希望找到比默認Web瀏覽器更簡單的示例。 –

+0

我怎麼能重新加載所有的控制回來。你可以做些什麼? –

0

您可以嘗試添加以下內容到活動處理從清單中的方向變化:

android:configChanges="orientation|screenLayout" 

我曾經有過同樣的問題,但這個工作對我來說。

+0

嗯,你提到 - 不是在原始問題 - 你正在以編程方式處理方向變化,除非你設置了我在Manifest中提到的屬性,否則這些變化不應該起作用。所以也許你可以嘗試這種方法。 – Gonan