9

Attualmente sto lavorando a un'applicazione con ritratto a orientamento schermo e ho un video HTML 5 che richiede il supporto a schermo intero. Ho aggiunto alla webview un WebChromeClient, alcuni metodi sovrascritti. Tutto sta funzionando bene quando mi attengo all'orientamento verticale, ma quando provo a cambiare orientamento in orizzontale quando vado a schermo intero, ho avuto un crash. Qualche indizio?HTML 5 arresto anomalo del video quando si passa a schermo intero

metodi 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()); 
     } 

Log dice:

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: ho questa linea nel mio manifesto:

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

potresti aiutarmi a risolvere questo [problema] (http://stackoverflow.com/questions/14156411/loading-youtube-video-through-i-frame-in-android-webview) – edwin

+2

Ho esattamente la stessa cosa problema, ma solo su Galaxy S3, quando si preme indietro (per uscire a schermo intero) – Pauland

+0

@Pauland Hai trovato la soluzione per questo problema? Sto anche ricevendo questo problema in S3. Potete per favore aiutarmi? – Noundla

risposta

0

Quando si passa l'orientamento della domanda si reimposta automaticamente a partire da un evento oncreate. Non cambia semplicemente l'altezza e la larghezza e le cose correlate. Questa è la ragione per cui stai ricevendo un'eccezione nulla del controllo che hai creato questa volta. Probabilmente HTML5View.

Quello che dovresti fare è tenere traccia della posizione del video e in caso di switch ricaricare tutti i controlli in base all'ultima posizione.

+0

Attualmente sto gestendo le modifiche di orientamento a livello di codice, a livello di attività. Quindi non dovrebbe essere distrutto e ricreato –

+0

Come hai detto Onur, tutto viene distrutto durante il cambio di orientamento, nonostante io mantenga lo stato e gestisco i cambiamenti di configurazione. Immagino che dovrò immergermi in un altro codice sorgente dell'app per scoprire come hanno gestito questa parte. Spero solo di trovare un esempio più semplice del browser Web predefinito. –

+0

Come posso ricaricare tutti i controlli. puoi eleborare? –

0

È possibile provare la gestione delle modifiche di orientamento del manifesto con l'aggiunta di questo alla vostra attività:

android:configChanges="orientation|screenLayout" 

Ho usato per avere lo stesso problema, ma questo ha funzionato per me.

+0

Bene, hai menzionato - non nella domanda originale - che stai gestendo le modifiche di orientamento a livello di codice che non dovrebbero funzionare in nessun caso a meno che tu non stia impostando gli attributi che ho citato nel Manifest. Quindi forse puoi provare questo approccio. – Gonan

Problemi correlati