Проверьте, воспроизводит ли WebView видео

Можно ли проверить, воспроизводит ли WebView видео в данный момент, и, если да, получить http: // ... .mp4 / URL этого видео для загрузки?

Я уже пробовал этот код:

public void onLoadResource(WebView view, final String url){
            super.onLoadResource(view, url);
            if (url.endsWith(".mp4") & !url.contains(".jpg") & !url.contains(".png")){

                AlertDialog.Builder video_downloaden = new AlertDialog.Builder(SearchActivity.this);
                video_downloaden.setTitle("Video downloaden?");
                video_downloaden.setMessage("Download Video?");
                video_downloaden.setPositiveButton("YES", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {

                        DownloadManager.Request request_video = new DownloadManager.Request(Uri.parse(url));
                        request_video.allowScanningByMediaScanner();

                        request_video.setVisibleInDownloadsUi(false);

                        DownloadManager downloadManager2 = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);

                        request_video.setDestinationInExternalFilesDir(getApplicationContext(), DIRECTORY_DOWNLOADS, File.separator + ".Videos" + File.separator + "video" + video_number);

                        downloadManager2.enqueue(request_video);
                        Toast.makeText(SearchActivity.this,"Download started",Toast.LENGTH_LONG).show();

                    }
                });
                video_downloaden.setNegativeButton("NO", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        dialogInterface.cancel();
                    }
                });

                video_downloaden.show();

            }
        }

Но с onLoadResource() AlertDialog отображается все время, и загрузка не работает каждый раз ... Итак, мой вопрос: есть ли другая возможность проверить, воспроизводит ли WebView видео, и получить URL-адрес видео?

2
0
2 057
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете определить, воспроизводится ли видео, с помощью JavaScript.

  1. Создайте файл .js в каталоге assets и объявите функцию JavaScript и jQuery следующим образом:

    $("video").on("play", function() {
     //You can call JavaScriptInterface here.
    });
    
  2. Вставьте этот файл .js на веб-страницу, содержащую видео. Я вставлял файл .js при вызове onPageFinished.

    view?.context?.assets?.let {
        val inputStream: InputStream = it.open(scriptFile)
        val buffer = ByteArray(inputStream.available())
        inputStream.read(buffer)
        inputStream.close()
    
        val encoded = Base64.encodeToString(buffer, Base64.NO_WRAP)
    
        view.loadUrl("javascript:(function() {" +
                "var parent = document.getElementsByTagName('head').item(0);" +
                "var script = document.createElement('script');" +
                "script.type = 'text/javascript';" +
                "script.innerHTML = window.atob('$encoded');" +
                "parent.appendChild(script)" +
                "})()")
    

    Если вы не знакомы с Kotlin, проверьте эту ссылку: Android Web-View: вставьте локальный файл Javascript на удаленную веб-страницу

  3. Сделанный! Если вы используете JavaScriptInterface, вы можете делать все, что захотите, вот так.

    class WebScriptInterface(val button: View) {
    
     @JavascriptInterface
     fun hideFloatingButton() {
       if (button.visibility == View.VISIBLE) {
        button.visibility = View.GONE
       }
     }
    }
    

Установите webView, используйте JavaScriptInterface.

webView.addJavascriptInterface
 (WebScriptInterface(binding.floatBrowserCollect), "App")

А потом звоните.

 $("video").on("play", function() {
    App.hideFloatingButton()
  });

Надеюсь, это поможет тебе.

Спасибо за ваш тент. Но у меня все еще есть проблемы: я не могу использовать @JavaScriptInterface, потому что: Android Studio говорит: здесь нельзя использовать аннотации. И я не знаю, как использовать JavaScript (потому что я использую его впервые). Когда я копирую этот код, я получаю только ошибки. (Например, view?.context?.assets?.let { А что значит val? Извините за глупые вопросы, но я новичок в программировании ...

Nils Be 12.07.2018 17:18

@NilsBe Смотрите это. Как добавить JavaScriptInterface И val используется в Kotlin. Отметьте номер 2 в моем ответе. Я связал URL-адрес того же кода в версии Java.

mel.j 16.07.2018 06:35

Большое спасибо, нет, это работает, но есть ли также возможность получить прямой URL-адрес видео, которое сейчас воспроизводится?

Nils Be 16.07.2018 16:53

@NilsBe Я слышал, что есть способ получить URL-адрес видео с помощью JavaScript. Но я никогда не пробовал. Как насчет этого? Имейте один флаг (например, переменную логического типа, которая выражает, воспроизводится видео или нет), а в методе onLoadResources получите URL-адрес видео, только этот флаг имеет значение false (видео не воспроизводится).

mel.j 17.07.2018 02:28

Привет @ mel.j, я следил за вашим решением, но оно не работает. Не могли бы вы дать мне полный образец? Заранее спасибо!

Na Pro 08.06.2021 11:33

Другие вопросы по теме