9

Aktualnie pracuję nad aplikacją z portretem orientacji ekranu i mam wideo w formacie HTML 5, które wymaga obsługi pełnoekranowej. Dodałem do Webview WebChromeClient, zastąpiłem kilka metod. Wszystko działa dobrze, gdy trzymam się orientacji portretowej, ale kiedy próbuję zmienić orientację na krajobraz, gdy przechodzę na pełny ekran, mam awarię. Jakaś wskazówka?Awaria wideo HTML 5 po przejściu na pełny ekran

Overrided metody:

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 mówi:

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: Mam ten wiersz w moim manifeście:

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

Czy możesz mi pomóc rozwiązać ten problem [Wydanie] (http://stackoverflow.com/questions/14156411/loading-youtube-video-through-i-ame-in-android-webview) – edwin

+2

Mam dokładnie to samo problem, ale tylko w galaktyce S3, kiedy naciśniesz ponownie (aby wyjść z trybu pełnoekranowego) – Pauland

+0

@Pauland Czy otrzymałeś rozwiązanie tego problemu? Otrzymuję również ten problem w S3. Możesz mi pomóc? – Noundla

Odpowiedz

0

Podczas przełączania orientacji aplikację resetuje to samo, zaczynając od zdarzenia oncreate. To nie tylko prosta zmiana wysokości i szerokości oraz związanych z nimi rzeczy. To, dlaczego otrzymujesz wyjątek null, jeden z formantów, które stworzyłeś, tym razem nie istnieje. Prawdopodobnie HTML5View.

Co należy zrobić, to śledzić pozycję wideo, aw przypadku przełącznika ponownie załadować wszystkie elementy sterujące zgodnie z ostatnią pozycją.

+0

Aktualnie programuje zmiany orientacji programowo, na poziomie Aktywności. Więc nie powinno być niszczone i odtwarzane. –

+0

Jak już powiedziałeś, wszystko ulega zniszczeniu podczas zmiany orientacji, pomimo tego, że zachowuję stan i operuję zmianami konfiguracji. Domyślam się, że będę musiał zanurkować w innym kodzie źródłowym aplikacji, aby znaleźć sposób na obsłużenie tej części. Mam nadzieję, że znajdę prostszy przykład niż domyślna przeglądarka internetowa. –

+0

Jak mogę ponownie załadować wszystkie elementy sterujące. czy możesz ukończyć? –

0

Można spróbować obsługi zmiany orientacji niż Manifest dodając to do aktywności:

android:configChanges="orientation|screenLayout" 

Kiedyś miałem ten sam problem, ale ten pracował dla mnie.

+0

Cóż, wspominasz - nie w pierwotnym pytaniu - że programowo programujesz zmiany orientacji, które nie powinny działać w żadnym wypadku, chyba że ustawiasz atrybuty wspomniane w Manifeście. Więc może możesz spróbować tego podejścia. – Gonan