воскресенье, 5 августа 2012 г.

Android: WebView vs. YouTube

Как известно, WebView не показывает ролики YouTube. Т.е. Показывает, конечно, но только через Flash. Т.е. Работает далеко не на всех устройствах. Самое смешное, что встроенный браузер Android эти же самые ролики отлично показывает.

Впрочем, если не принципиально смотреть ролик на самой странице, то выход есть. Что для этого нужно:
  1. Перед показом страницы распарсить ее, найти ролики YouTube. Как правило, надо искать тег <objsafeect>, внутри которого есть источник src="http://www.youtube.com/v/ролик-ИД".
  2. Вместо этого тега надо вписать свою cсылку. Если в ней хочется показать название видео, то для этого надо сходить на YouTube и запросить его. Вместо описания просто приведу пример:
    private String getYouTubeVideoTitle(String videoUrl)
    {
        try
        {
            final String videoInfoUrl = ("http://www.youtube.com/oembed?url=" + 
                URLEncoder.encode(videoUrl, "UTF-8")).replace("%2Fv%2F", "%2Fwatch%3Fv%3D") + 
                "&format=xml";
            URL url = new URL(videoInfoUrl);
            URLConnection urlConn = url.openConnection();
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            Document doc = db.parse(urlConn.getInputStream());
            String title = doc.getElementsByTagName("title").item(0).getTextContent();
            return title;
        }
        catch (Exception ex)
        {
            // Если не получилось - ничего не делаем, возвращаем null.
        }
        return null;
    }
  3. При клике на эту ссылку надо запустить встроенное приложение YouTube. Для этого вызываем у WebView метод setWebViewClient и передаем в него объект с переопределенным методом shouldOverrideUrlLoading, в котром проверяем url  и при необходимости запускаем Intent.ACTION_VIEW с Youtube url.


PS. ECM-Journal 2.1.2 с такой фишкой - уже в Google Play Store.

PPS. Если вам нравится приложение, не забывайте голосовать или даже писать комменты :-)