Android WebView с встроенным видео с YouTube, полноэкранная кнопка замораживает видео

У меня есть андроид, который загружает блог WordPress. Некоторые сообщения в блоге содержат видео с YouTube, которые я хотел бы, чтобы пользователь мог сделать полный экран, если захочет. Проблема заключается в том, что кнопка полного экрана HTML5 ничего не делает при нажатии, но замораживает представление. Есть идеи?

Это то, что я провел в последний день или так разрывал мои волосы. Основываясь на разных битах кода со всего Интернета, мне удалось заставить его работать.

Во-первых, вам нужно создать собственный class WebChromeClient , который реализует методы onShowCustomView и onHideCustomView .

 private class MyWebChromeClient extends WebChromeClient { FrameLayout.LayoutParams LayoutParameters = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT); @Override public void onShowCustomView(View view, CustomViewCallback callback) { // if a view already exists then immediately terminate the new one if (mCustomView != null) { callback.onCustomViewHidden(); return; } mContentView = (RelativeLayout) findViewById(R.id.activity_main); mContentView.setVisibility(View.GONE); mCustomViewContainer = new FrameLayout(MainActivity.this); mCustomViewContainer.setLayoutParams(LayoutParameters); mCustomViewContainer.setBackgroundResource(android.R.color.black); view.setLayoutParams(LayoutParameters); mCustomViewContainer.addView(view); mCustomView = view; mCustomViewCallback = callback; mCustomViewContainer.setVisibility(View.VISIBLE); setContentView(mCustomViewContainer); } @Override public void onHideCustomView() { if (mCustomView == null) { return; } else { // Hide the custom view. mCustomView.setVisibility(View.GONE); // Remove the custom view from its container. mCustomViewContainer.removeView(mCustomView); mCustomView = null; mCustomViewContainer.setVisibility(View.GONE); mCustomViewCallback.onCustomViewHidden(); // Show the content view. mContentView.setVisibility(View.VISIBLE); setContentView(mContentView); } } } 

В основном, что происходит здесь, когда нажата кнопка полного экрана, мы создаем новое представление, чтобы удерживать видео и скрывать основной вид. А затем, когда полный экран закрыт, мы делаем обратное – избавьтесь от нового представления и покажем исходное представление.

Вы также должны добавить все эти свойства в свой class активности:

 private MyWebChromeClient mWebChromeClient = null; private View mCustomView; private RelativeLayout mContentView; private FrameLayout mCustomViewContainer; private WebChromeClient.CustomViewCallback mCustomViewCallback; 

Возможно, вы захотите закрыть полноэкранное видео при нажатии кнопки «Назад»:

 @Override public void onBackPressed() { if (mCustomViewContainer != null) mWebChromeClient.onHideCustomView(); else if (myWebView.canGoBack()) myWebView.goBack(); else super.onBackPressed(); } 

Тогда это просто вопрос использования нового classа при создании веб-представления:

 myWebView = (WebView) findViewById(R.id.webView1); mWebChromeClient = new WMWebChromeClient(); myWebView.setWebChromeClient(mWebChromeClient); 

Это работает для меня на Android 4.x. Не уверен в более ранних версиях, так как мое приложение не нацеливается на них.

Я нашел эти ссылки особенно полезными: WebView и HTML5

Вы можете запустить внешнее приложение YouTube, когда вы будете показывать информацию о видеоролике, так как не важно показывать видео YouTube прямо в приложении.

Чтобы уловить URL-адрес видеоинформации, вам необходимо onLoadResource метод onLoadResource :

 new WebViewClient() { @Override public void onLoadResource(WebView view, String url) { if (url.startsWith("http://www.youtube.com/get_video_info?")) { try { String path = url.replace("http://www.youtube.com/get_video_info?", ""); String[] parqamValuePairs = path.split("&"); String videoId = null; for (String pair : parqamValuePairs) { if (pair.startsWith("video_id")) { videoId = pair.split("=")[1]; break; } } if(videoId != null){ startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.youtube.com")) .setData(Uri.parse("http://www.youtube.com/watch?v=" + videoId))); needRefresh = true; return; } } catch (Exception ex) { } } else { super.onLoadResource(view, url); } } } 
  • Как я могу автовоспроизвести видео с помощью нового стиля встраиваемого кода для Youtube?
  • Play Youtube HTML5 встроенное видео в Android WebView
  • Воспроизведение видео на YouTube в приложении для Android
  • Как отключить видеоролики YouTube от автоматического воспроизведения?
  • API YouTube для получения всех видео на канале
  • Конвертировать YouTube DASH audio (youtube-dl) в m4a (AAC DL)
  • Только 360p на Youtube с HTML5
  • Расширение Chrome не загружается в браузере на YouTube
  • UIMoviePlayerControllerDidEnterFullscreenNotification не работает в iOS8
  • HTML-тег видео, не отображающийся на источнике некоторых веб-сайтов
  • Проводка встроенной видеосвязи с использованием API-интерфейса Facebook Graph
  • Давайте будем гением компьютера.