DownloadListener.onDownloadStart () никогда не вызывается - PullRequest
5 голосов
/ 27 апреля 2011

В моих попытках создать WebView, который воспроизводит видео YouTube через HTML5 не через Flash), я попытался реализовать эту статью дословно, верно в onCreate () моей деятельности:

  WebView webView = (WebView) findViewById(R.id.embeddedWebView);
  webView.setDownloadListener(new DownloadListener()
  {
    public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimeType, long size)
    {
      Log.v("TAG", "url: " + url + ", mimeType: " + mimeType);

      Intent viewIntent = new Intent(Intent.ACTION_VIEW);
      viewIntent.setDataAndType(Uri.parse(url), mimeType);

      try
      {
        startActivity(viewIntent);
      }
      catch (ActivityNotFoundException ex)
      {
        Log.w("YourLogTag", "Couldn't find activity to view mimetype: " + mimeType);
      }
    }
  });  

По какой-то причине он не вызывался, поэтому, заметив, что нигде в моем коде я не указываю "реализует DownloadListener", я повторно реализовал его как отдельный класс, который определен как

public class MyDownloadListener implements DownloadListener 

и реализует onDownloadStart (), как указано выше (передавая активность в качестве параметра, чтобы она могла вызывать startActivity (). Затем в onCreate () я просто делаю:

mDownloadListener = new MyDownloadListener(this);
mWebView.setDownloadListener(mDownloadListener);

Я попробовал еще раз на YouTube и на http://broken -links.com / tests / video / и до сих пор не вижу в LogCat каких-либо проследить, что onDownloadStart () когда-либо вызывается.

Что мне нужно сделать, чтобы это вызвали? Чего мне не хватает?

1 Ответ

6 голосов
/ 27 апреля 2011

setDownloadListener устанавливает слушателя, когда WebView не считает, что контент может быть обработан механизмом рендеринга.

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

В веб-представлении используется механизм рендеринга WebKit, и я считаю, что он может (или думает, что может) обрабатывать html5, чтобы не вызывать слушателя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...