Pull to refresh

Проигрывание YouTube видео с помощью WebView

Reading time 2 min
Views 9.8K
Некоторые разработчики под Андроид ОС могли столкнуться с проблемой проигрывания видео с youtube, в версии операционной системы 2.2 и старше. Когда старый вариант с использованием shouldOverrideUrlLoading уже перестал работать, а новые решения достаточно проблематично отыскать. В данном посте я предлагаю пример основанный на использовании некоторых особенностей WebView связанных с динамическим созданием так называемых CustomView.

Описание происходящего


Для упрощения работы с проигрыванием видео, разработчики Андроид уже добавили автоматическое создание потокового плеера со всеми необходимыми параметрами и VideoView для отображения этого потока. Нам как разработчикам нужно только корректно использовать всё это богатство и правильно им распорядиться.

VideoView

После клика пользователя на превью в WebView показывающем мобильную версию youtube:



WebView вызывает передает в WebChromeClient объект содержащий уже запущеныей VideoView готовый к показу на экран, наша задача позволить данному View отобразить свой контент пользователю. Поэтому в методе onShowCustomView мы получаем и обрабатывем этот компонент, добавляя его в текущую иерархию виджетов.

@Override<br/>
public void onShowCustomView(View view, CustomViewCallback callback) {<br/>
    if (mCustomView !null) {<br/>
        callback.onCustomViewHidden();<br/>
    } else {<br/>
        mCustomView = view;<br/>
        mCustomViewCallback = callback;<br/>
        mWebView.setVisibility(View.GONE);<br/>
        mMainContentContainer.addView(view, CUSTOM_VIEW_LAYOUT_PARAMS);<br/>
    }<br/>
}



Но так как мы изменили текущий View, то для продолжения просмотра сайта, после просмотра видео или по клику на кнопку BACK, мы должны вернуть предидущее состояние иерархии, для этого используется ещё один метод из WebChromeClient, а именно onHideCustomView. В нем мы закрываем VideoView и продолжаем показ WebView.

@Override<br/>
public void onHideCustomView() {<br/>
    if (mCustomView !null) {<br/>
        mMainContentContainer.removeView(mCustomView);<br/>
        mCustomViewCallback.onCustomViewHidden();<br/>
        mCustomView = null;<br/>
        mWebView.setVisibility(View.VISIBLE);<br/>
    }<br/>
}



Этих действий вполне достаточно для работы с YouTube видео на Android 2.2.
Пример работающего проекта.
Tags:
Hubs:
+10
Comments 10
Comments Comments 10

Articles