1

Я работаю над этой проблемой не менее одной недели. Я прочитал все сообщения об этом в StackOverflow, но я до сих пор не нашел решения, и я начинаю думать, что это невозможно.Android WebView html5 video force fullscreen

Я хочу, чтобы отобразить HTML в WebView embebbed в макете, как это:

Scheme of the problem

Проблема в том, что если что HTML код имеет видео HTML5 внутри него будет обрезана из-за ошибки в ОС Android: Link to bug.

Я пробовал много обходных решений, но ни один из них, похоже, не работает. Моя последняя попытка - показать видео в полноэкранном режиме для устройств ниже Jelly Bean (они исправили ошибку для этой версии).

У меня нет никакого контроля над HTML, который я должен отображать, поэтому единственный способ, которым я нашел что-то сделать, - ввести код javascript. Прямо сейчас, я обрабатываю как onShowCustomView, чтобы сделать его полноэкранным.

setWebViewClient(new WebViewClient() { 

    @Override 
    public void onPageFinished(WebView view, String url) { 
     super.onPageFinished(view, url); 
     if (android_sdk < JELLY_BEAN) { 
      detectVideoOnWebPage(); 
     } 
    } 
}); 

private void detectVideoOnWebPage() { 
    // Run javascript code that detects the video end and notifies the 
    // interface 
    String js = "javascript:"; 
    js += "_ytrp_html5_video = document.getElementsByTagName('VIDEO')[0];"; 
    js += "if (_ytrp_html5_video !== undefined) {"; 
    { 

     js += "_ytrp_html5_video.webkitEnterFullScreen();"; 
     js += "_VideoEnabledWebView.notifyVideoPresence();"; 
     js += "function video_start_playing() {"; 
     { 
      js += "_VideoPlayed.notifyVideoStarted();"; 
      js += "ev.target.removeEventListener('playing', video_start_playing);"; 

     } 
     js += "}"; 
     js += "ev.target.addEventListener('playing', video_start);"; 
    } 
    js += "} else if (document.getElementsByTagName('iframe')) {"; 
    { 
     js += "_VideoEnabledWebView.notifyVideoPresence();"; 
    } 
    js += "} else {"; 
    { 
     js += "var handler = function(ev) {"; 
     { 
      js += "if (ev.target.nodeName.toUpperCase() === \"VIDEO\".toUpperCase()) {"; 
      { 
       js += "function video_start_playing() {"; 
       { 
        js += "_VideoPlayed.notifyVideoStarted();"; 
        js += "ev.target.webkitEnterFullScreen();"; 
       } 
       js += "}"; 
       js += "ev.target.addEventListener('play', video_start_playing);"; 
       js += "_VideoDetected.notifyVideoPresence();"; 
       js += "document.removeEventListener (\"DOMNodeInserted\", handler);"; 
      } 
      js += "} else {"; 
      { 
       js += "_ytrp_html5_video = document.getElementsByTagName('VIDEO')[0];"; 
       js += "if (_ytrp_html5_video !== undefined) {"; 
       { 
        js += "_VideoEnabledWebView.notifyVideoPresence();"; 
       } 
      } 
      js += "};"; 
     } 
     js += "};"; 
     js += "document.addEventListener (\"DOMNodeInserted\", handler);"; 
    } 
    js += "}"; 
    loadUrl(js); 
} 

Моя цель:

  • Detect, когда HTML содержит html5 видео.
  • Для версий ОС ниже, чем Jelly Bean, нажмите полноэкранный режим.

Прямо сейчас, я достиг:

  • дисплея в полноэкранном режиме для html5 видео, которые не внутри фрейма для версий ниже, чем Ice Cream Sandwich (ICS игнорировать webkitEnterFullScreen)
+0

Я должен обдумать в попытке собрать относительную информацию; эта проблема - результат преследования «святого Грааля»? [x-platform dev] – ChiefTwoPencils

+1

Да, это так. Просто чтобы вы знали, насколько я в отчаянии, я попытался имитировать событие касания на полноэкранной кнопке :) – Juangcg

ответ

-2

Вы можете попробовать установить агент пользователя в WebView это работает для меня на ICS, как это:

String ua = "Mozilla/5.0 (Android; Tablet; rv:20.0) Gecko/20.0 Firefox/20.0"; 

WebSettings s = webView.getSettings(); 
s.setUserAgentString(ua); 

если не работает, look at this link for other user agents.

Успехов

0

Вы можете запросить полный экран на события игры, как это:

var element = document.getElementById("video"); 
element.addEventListener("playing", function() { 
    if (element.requestFullscreen) { 
     element.requestFullscreen(); 
    } else if (element.webkitRequestFullscreen) { 
     element.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT); 
    } 
}, false); 

 Смежные вопросы

  • Нет связанных вопросов^_^