Поиск в YouTube HTML5 видео по Android WebView
EDIT Nevermind, YouTube выпустил собственный API для Android (https://developers.google.com/youtube/android/player/)
У меня есть приложение, которое показывает видеообъявление HTML5 через WebView. Это видео вынуждено быть HTML5 из сервиса YouTube (http://www.youtube.com/embed/3FFyT039tJ0?autoplay=1&rel=0&showinfo=0&html5=1&start=90&end=176
)
Как вы можете видеть в URL-адресе, параметр "start" показывает количество секунд, в которые должно начинаться воспроизведение видео. Я использовал метод onShowCustomView
для WebChromeClient
, чтобы получить объект VideoView
, созданный WebView, как показано здесь.
Когда у меня есть ссылка на VideoView
, я могу использовать метод seekTo()
для достижения своей цели. До сих пор все в порядке, но только для версий Android ниже 4.x.
Как известно многим, метод onShowCustomView
of WebViewChromeClient
, начиная с 4.x и forward, вызывается только при нажатии пользователем в режиме "FullScreen", но не при воспроизведении видео (как обычно используется до 4.x).
Итак, дело в том, что я не могу запросить 90 секунд вперед, потому что я не могу получить ссылку на VideoView, и я не могу найти обходное решение.
Ответы
Ответ 1
Для будущих зрителей
Теперь у YouTube есть API-интерфейс игрока:
https://developers.google.com/youtube/android/player/
Где вы можете легко разместить представление в xml и обработать его в действии, вот примеры:
https://github.com/youtube/yt-android-player
Ответ 2
Попробуйте следующее:
wv.getSettings().setPluginsEnabled(true);
DisplayMetrics metrics = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);
int w1 = (int) (metrics.widthPixels / metrics.density), h1 = w1 * 3 / 5;
String item="http://www.youtube.com/embed/3FFyT039tJ0";
wv.getSettings().setJavaScriptEnabled(true);
wv.setWebChromeClient(chromeClient);
wv.getSettings().setPluginsEnabled(true);
try {
wv.loadData(
"<html><body><iframe class=\"youtube-player\" type=\"text/html5\" width=\""
+ (w1 - 20)
+ "\" height=\""
+ h1
+ "\" src=\""
+ item
+ "\" frameborder=\"0\"\"allowfullscreen\"></iframe></body></html>",
"text/html5", "utf-8");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
И напишите webchrome-клиент следующим образом:
private WebChromeClient chromeClient = new WebChromeClient() {
@Override
public void onShowCustomView(View view, CustomViewCallback callback) {
super.onShowCustomView(view, callback);
if (view instanceof FrameLayout) {
FrameLayout frame = (FrameLayout) view;
if (frame.getFocusedChild() instanceof VideoView) {
VideoView video = (VideoView) frame.getFocusedChild();
frame.removeView(video);
video.start();
}
}
}
};
Ответ 3
Если кто-то хочет использовать WebView
еще для воспроизведения видео на YouTube, два соображения:
- В зависимости от версии Android это невозможно. Android версии 4.x через
WebView
не может этого сделать (или я не нашел способ:) Как я уже писал
здесь
- Если вы находитесь в Android 5 или выше, вы должны установить
WebChromeClient
в компонент WebView
: setWebChromeClient(new WebChromeClient());
Надеюсь, что это поможет!