2017-05-26 119 views
5

WebView içinde video gömülü video bağlantılarına (ex: https://www.youtube.com/embed/dQw4w9WgXcQ) tam bir çalışma düğmesi olması için WebChromeClient alt sınıfını uygulamaya çalışıyorum.WebView içindeki Videonun tam ekran düğmesi çalışmıyor

VideoWebChromeClient:

public class VideoWebChromeClient extends WebChromeClient { 
    private boolean isVideoFullscreen = false; 
    private View activityNonVideoView; 
    private ViewGroup activityVideoView; 
    private View videoViewContainer; 
    private CustomViewCallback videoCallback; 
    private Window videoWindow; 

    public VideoWebChromeClient(View activityNonVideoView, ViewGroup activityVideoView, Window window) { 
     this.activityNonVideoView = activityNonVideoView; 
     this.activityVideoView = activityVideoView; 
     this.videoWindow = window; 
    } 

    @Override 
    public void onShowCustomView(View view, CustomViewCallback callback) { 
     Log.w("ENTER FULLSCREEN"); 
     videoCallback = callback; 
     videoViewContainer = view; 
     videoWindow.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
     activityNonVideoView.setVisibility(View.GONE); 
     activityVideoView.addView(videoViewContainer, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); 
     activityVideoView.setVisibility(View.VISIBLE); 
     isVideoFullscreen = true; 
    } 

    @Override 
    public void onHideCustomView() { 
     if (!isVideoFullscreen) { 
      return; 
     } 
     Log.w("EXIT FULLSCREEN"); 
     activityVideoView.setVisibility(View.GONE); 
     activityVideoView.removeView(videoViewContainer); 
     activityNonVideoView.setVisibility(View.VISIBLE); 
     videoWindow.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
     videoViewContainer = null; 
     videoCallback.onCustomViewHidden(); 
     isVideoFullscreen = false; 
    } 

    public boolean onBackPressed() { 
     onHideCustomView(); 
     return isVideoFullscreen; 
    } 
    } 

WebViewActivity

public class WebViewActivity extends BaseActivity { 

    public static final String WEB_VIEW_URL_EXTRA = "URL"; 
    private boolean loadedFirstURL = true; 
    private VideoWebChromeClient mWebChromeClient; 

    @Bind(webview) 
    WebView mWebView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(provideLayoutId()); 
     String url = (String) getIntent().getSerializableExtra(WEB_VIEW_URL_EXTRA); 

     // Check if URL is YouTube/Vimeo 
     if (RegexHelper.isVideoURL(url)){ 
      // Allow Fullscreen 
      final View defaultLayout = findViewById(R.id.defaultLayout); 
      final View fullscreenLayout = findViewById(R.id.fullscreenLayout); 
      mWebChromeClient = new VideoWebChromeClient(defaultLayout, (ViewGroup) fullscreenLayout, getWindow()); 
      mWebView.setWebChromeClient(mWebChromeClient); 

      // Block external links 
      mWebView.setWebViewClient(new WebViewClient() { 
       @Override 
       public boolean shouldOverrideUrlLoading(WebView view, String url) { 
        if (loadedFirstURL) { 
         loadedFirstURL = false; 
         return false; 
        } 
        return true; 
       } 
      }); 
     } 
     mWebView.getSettings().setJavaScriptEnabled(true); 
     mWebView.loadUrl(url); 
    } 

     @Override 
     public void onBackPressed() { 
      if (!mWebChromeClient.onBackPressed()) 
      { 
       if (mWebView.canGoBack()) { 
        mWebView.goBack(); 
       } 
       else { 
        super.onBackPressed(); 
       } 
      } 
     } 
    } 

Bu doğru KitKat b çalışır

Ben this repo temelde basitleştirilmiş, burada bazı parçacıkları şunlardır Nougat'da (yalnızca test edilecek iki cihazım var): tam ekran düğmesine dokunduğumda bazen tam ekrana geçiyor, ancak çoğu zaman "yanıp sönüyor" ve tam ekran kullanılmıyor.

Ve tam ekran modunda aslında olduğunda sonra, Tam ekrandan çıkmak için düğmesi çalışmıyor

Ben günlükleri koymak olduğunu görebilirsiniz (onHideCustomView hiç çağrılmaz) ve fark zaman "flaş" olur, onHideCustomView aslında doğru olarak adlandırılır onShowCustomView ("ENTER FULLSCREEN" sonra hemen "EXIT FULLSCREEN"), neden anlamıyorum.

Çok teşekkürler herkes bir solüsyon

+0

Sadece deneyimlerime ve araştırmamıza dayanan bir fikir: youtube videolarıyla başa çıkmak için web sayfasını unutun: uygun Youtube API'sini kullanmak her haftaki şaşırtıcı güncellemeden kurtulacak. – statosdotcom

+0

@statosdotcom yes Ben bunu sadece YouTube uygulamasında açabilmeyi isterdim ancak amacım sadece bir video görüntülemekten ve başkalarını önermekten kaçınmaktan yana olamam. – CyrilFind

+0

Belki de API sizin için bazı yapılandırmalar sunabilir ve bazı ince ayarlara izin verebilir. Sanırım ona bir göz atmalısın. İyi şanslar. – statosdotcom

cevap

0

Ben de aynı sorunu bakıyordu ama üzerinde saat geçirdikten sonra düzelttim doğru beni işaret eğer.

Tüm yapmanız gereken bir KitKat aygıtının UserAgent Dizesini ayarlamak. Ve işte bu!

private String userAgent = "Mozilla/5.0 (Linux; Android 4.4; Nexus 5 Build/_BuildID_) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36"; 
mWebView.getSettings().setUserAgentString(userAgent); 

Bu yeni cihazlarda) ve onHideCustomView() onShowCustomView (tüm garip işleyişini çözecektir. Umut eder.

+0

benimle çalışmıyor. – User9527

+0

Bu daha çok bir geçici çözümdür, ancak teşekkür ederim, eğer bunun üzerinde tekrar çalışırsam bunu aklımda tutacağım. – CyrilFind