Как остановить воспроизведение youtube видео в веб-браузере Android?

Как остановить видео YouTube, которое воспроизводится в моем веб-просмотре? Когда я нажимаю кнопку «Назад», видео не останавливается и вместо этого продолжается в фоновом режиме.

Код:

webView = (WebView) findViewById(R.id.webview); webView.getSettings().setPluginsEnabled(true); webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setBuiltInZoomControls(false); webView.getSettings().setSupportZoom(false); webView.loadData(myUrl,"text/html", "utf-8"); 

См. Следующее сообщение о том, что потоки WebView никогда не останавливаются

По сути, вам нужно будет вызвать метод onPause WebView из метода onPause своего собственного действия.

Единственный трюк в этом заключается в том, что вы не можете вызвать метод onPause WebView напрямую, потому что он скрыт. Поэтому вам нужно будет называть это косвенно через отражение. Следующий код должен начать работу над настройкой метода onPause собственного действия:

 @Override public void onPause() { super.onPause(); try { Class.forName("android.webkit.WebView") .getMethod("onPause", (Class[]) null) .invoke(webview, (Object[]) null); } catch(ClassNotFoundException cnfe) { ... } catch(NoSuchMethodException nsme) { ... } catch(InvocationTargetException ite) { ... } catch (IllegalAccessException iae) { ... } } 

Обратите внимание, что переменная 'webview' в вышеприведенном блоке try является частной переменной экземпляра для класса и назначается в методе onCreate Activity.

Решение: 1 – Потратив много времени, я пришел к выводу о приостановке видео, которое воспроизводится с помощью концепции WebView <iframe> HTML.

Просто переопределите метод onPause() для Activity или Fragment, если вы используете WebView , и вызывайте его. Меня устраивает.

 @Override public void onPause() { super.onPause(); mWebView.onPause(); } @Override public void onResume() { super.onResume(); mWebView.onResume(); } 

Решение. 2. Если вышеуказанное решение не работает для вас, вы можете заставить WebView загрузить несуществующий html-файл.

 mWebview.loadUrl("file:///android_asset/nonexistent.html"); 

Вы также должны реализовать метод onResume () или во второй раз не работать

 @Override public void onResume() { super.onResume(); webView.onResume(); } @Override public void onPause() { super.onPause(); webView.onPause(); } 

Вышеупомянутое решение провалилось для меня на Samsung Galaxy S с Android 2.3.3. Но я сделал успешную попытку обходного решения:

  webview.loadUrl("file:///android_asset/nonexistent.html"); 

Я заставляю webview загружать несуществующий html-файл. Кажется, это заставляет webview очищать вещи.

 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub if(keyCode==event.KEYCODE_BACK) { mWebview.loadUrl(""); mWebview.stopLoading(); finish(); } return super.onKeyDown(keyCode, event); } 

оно работает

И вот мой личный фаворит:

 @Override protected void onPause() { super.onPause(); if (isFinishing()) { webView.loadUrl("about:blank"); } else { webView.onPause(); webView.pauseTimers(); } } @Override protected void onResume() { super.onResume(); webView.resumeTimers(); webView.onResume(); } 

Он приостанавливает просмотр веб-страниц, если представление приостановлено, но очищает его, когда действие завершено.

Для этого требуется, по крайней мере, Android 3.0 – API 11 (Honeycomb)

Webview.loadUrl ( "о: пустой");

Он также работает

После того, как вы столкнулись с этой проблемой, кажется, что onPause может ничего не делать … для меня это не остановило все, что играло в фоновом режиме.

Поэтому мой код теперь выглядит

 @Override protected void onPause() { mWebView.onPause(); super.onPause(); } @Override protected void onResume() { mWebView.onResume(); super.onResume(); } @Override protected void onSaveInstanceState(Bundle outState) { mWebView.saveState(outState); super.onSaveInstanceState(outState); } @Override protected void onDestroy() { mWebView.destroy(); mWebView = null; super.onDestroy(); } 

Надеюсь, что это поможет любому, у кого есть такая же проблема, как у меня

Попробуй это:

 @Override public void onPause() { super.onPause(); myWebView.onPause(); myWebView.pauseTimers(); } @Override public void onResume() { super.onResume(); myWebView.resumeTimers(); myWebView.onResume(); } @Override protected void onDestroy() { myWebView.destroy(); myWebView = null; super.onDestroy(); } 

Это работает для меня.

 @Override protected void onPause() { super.onPause(); if (wViewCampaign != null){ wViewCampaign.stopLoading(); wViewCampaign.loadUrl(""); wViewCampaign.reload(); wViewCampaign = null; } } 

Вы можете сделать это, используя метод onPause() WebView, когда выполняется метод onPause() вашей Activity :

 @override public void onPause() { super.onPause(); if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){ webview.onPause(); } } 
  • Работает для API >= 11 ( Honeycomb )

Это то, что, наконец, работало после проверки каждого кода, представленного на этой странице. Уфф!

 @Override protected void onPause() { super.onPause(); if (mWebView != null) { mWebView.stopLoading(); mWebView.reload(); } } @Override protected void onResume() { super.onResume(); } 

Вы можете попробовать это

 webView.loadUrl("javascript:document.location=document.location"); 

Если загружаемая страница – это та, которую вы можете редактировать, тогда вы можете написать метод javascript, который остановит звук и вызовет, когда вы хотите остановиться.

Функция Javascript

  function stopAudio(){ audios=document.querySelectorAll('audio'); for(i=0;i<audios.length;i++){ audios[i].stop(); } } 

От Андорида Вызовите этот метод

 webView.loadUrl("javascript:stopAudio()"); 

Если страница не редактируется вами, вы можете ввести код js

  @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); injectScriptFile(view, "js/script.js"); } 

Как вставить См. Здесь в деталях

Этот код отлично подходит для меня.

  @Override protected void onPause() { super.onPause(); wv.onPause(); wv.pauseTimers(); } @Override protected void onResume() { super.onResume(); wv.resumeTimers(); wv.onResume(); }