Я работаю над этой проблемой не менее одной недели. Я прочитал все сообщения об этом в StackOverflow, но я до сих пор не нашел решения, и я начинаю думать, что это невозможно.Android WebView html5 video force fullscreen
Я хочу, чтобы отобразить HTML в WebView embebbed в макете, как это:
Проблема в том, что если что 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)
Я должен обдумать в попытке собрать относительную информацию; эта проблема - результат преследования «святого Грааля»? [x-platform dev] – ChiefTwoPencils
Да, это так. Просто чтобы вы знали, насколько я в отчаянии, я попытался имитировать событие касания на полноэкранной кнопке :) – Juangcg