Подтвердить что ты не робот

Вставить видео Youtube в приложение для Android

Я использую WebView для отображения встроенного видео Youtube и работает на Galaxcy S2 (OS 2.3.5) и не на Nexus S (OS 2.3.4), все, что я получаю, это белый экран без какого-либо видеодисплея.

Вот фрагмент кода, который я использую, и объявления в файле манифеста:

private WebView wv;

private void setWebView()
{
wv = (WebView) findViewById(R.id.webView);

wv.setWebChromeClient(new WebChromeClient());

wv.getSettings().setPluginState(WebSettings.PluginState.ON);

wv.setWebViewClient(new WebViewClient()); 

wv.getSettings();

wv.setBackgroundColor(0x00000000);

wv.setKeepScreenOn(true);

wv.setHorizontalScrollBarEnabled(false);
wv.setVerticalScrollBarEnabled(false);

wv.getSettings().setBuiltInZoomControls(true);

final String mimeType = "text/html";
final String encoding = "UTF-8";
String html = getHTML();

wv.loadDataWithBaseURL("", html, mimeType, encoding, "");

}


public String getHTML()
{

String html = "<html>"

    + "<head>"
 + "</head>"
 + "<body style=\"border: 0; padding: 0\">"
 + "<iframe "
 + "type=\"text/html\" "
 + "class=\"youtube-player\" "
 + "width= 100%\""
 + "\" "
 + "height= 95%\""
 + "\" "
 + "src=\"http://www.youtube.com/v/"
 + selected_video 
    + "?controls=0&showinfo=0&showsearch=0&modestbranding=0" +
 "&autoplay=1&fs=1&vq=hd720\" " + "frameborder=\"0\"></iframe>" 
    + "</body>"
    + "</html>";

 return html;
}

Примечание: параметр "selected_video" - это хеш видео (VideoID).

Объявления в файле манифеста:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android=http://schemas.android.com/apk/res/android
.
.
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"  />

<application
   .
   .
    android:hardwareAccelerated="true"  >

    .
    .

Пожалуйста, дайте мне знать, если вы узнаете что-либо, что я должен изменить в своем коде, или помочь с полным кодом, который может поддерживать все устройства Android и ОС для отображения встроенного (In-App) видео Youtube с высоким качеством.

UPDATE: Обратите внимание, решение, которое я ищу, должно отображать видео высокого разрешения. Я работал над различными устройствами и ОС с помощью класса VideoView, но качество видео недостаточно. Поэтому любое решение, включая VideoView или WebView или любым другим способом, будет приниматься только в том случае, если оно будет отображать видео высокого качества YouTube. Спасибо всем ответчикам!

4b9b3361

Ответ 1

есть официальный API Android Player для Android, который вы можете использовать. Это немного сложнее, но работает лучше, чем другие решения с использованием веб-клиентов.

Сначала вы должны зарегистрировать свое приложение в Консоли API Googles. Это абсолютно бесплатно, пока ваше приложение не получит более 25 000 запросов в месяц (или что-то в этом роде). По ссылке есть полные и большие учебные пособия. Надеюсь, вы сможете понять их. Если нет, спросите!:)

Ответ 2

хотя я предлагаю использовать youtube api или вызывать новое намерение и заставить систему обрабатывать его (например, приложение youtube), вот какой-то код, который может вам помочь, он имеет вызов скрытого метода, потому что вы не можете приостановить и возобновить WebView

import java.lang.reflect.Method;

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;

import android.app.Activity;

@SuppressLint("SetJavaScriptEnabled")
public class MultimediaPlayer extends Activity
{
    private WebView mWebView;
    private boolean mIsPaused = false;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.webview);

        String media_url = VIDEO_URL;

        mWebView = (WebView) findViewById(R.id.webview);
        mWebView.setWebChromeClient(new WebChromeClient());

        WebSettings ws = mWebView.getSettings();
        ws.setBuiltInZoomControls(true);
        ws.setJavaScriptEnabled(true);

        mIsPaused = true;
        resumeBrowser();
        mWebView.loadUrl(media_url);
    }

    @Override
    protected void onPause()
    {
        pauseBrowser();
        super.onPause();
    }

    @Override
    protected void onResume()
    {
        resumeBrowser();
        super.onResume();
    }

    private void pauseBrowser()
    {
        if (!mIsPaused)
        {
            // pause flash and javascript etc
            callHiddenWebViewMethod(mWebView, "onPause");
            mWebView.pauseTimers();
            mIsPaused = true;
        }
    }

    private void resumeBrowser()
    {
        if (mIsPaused)
        {
            // resume flash and javascript etc
            callHiddenWebViewMethod(mWebView, "onResume");
            mWebView.resumeTimers();
            mIsPaused = false;
        }
    }

    private void callHiddenWebViewMethod(final WebView wv, final String name)
    {
        try
        {
            final Method method = WebView.class.getMethod(name);
            method.invoke(mWebView);
        } catch (final Exception e)
        {}
    }
}

Ответ 3

Он работает следующим образом:

String item = "http://www.youtube.com/embed/";

String ss = "your url";
ss = ss.substring(ss.indexOf("v=") + 2);
item += ss;
DisplayMetrics metrics = getResources().getDisplayMetrics();
int w1 = (int) (metrics.widthPixels / metrics.density), h1 = w1 * 3 / 5;
wv.getSettings().setJavaScriptEnabled(true);
wv.setWebChromeClient(chromeClient);
wv.getSettings().setPluginsEnabled(true);

try {
    wv.loadData(
    "<html><body><iframe class=\"youtube-player\" type=\"text/html5\" width=\""
    + (w1 - 20)
    + "\" height=\""
    + h1
    + "\" src=\""
    + item
    + "\" frameborder=\"0\"\"allowfullscreen\"></iframe></body></html>",
                            "text/html5", "utf-8");
} catch (Exception e) {
    e.printStackTrace();
}

private WebChromeClient chromeClient = new WebChromeClient() {

    @Override
    public void onShowCustomView(View view, CustomViewCallback callback) {
        super.onShowCustomView(view, callback);
        if (view instanceof FrameLayout) {
            FrameLayout frame = (FrameLayout) view;
            if (frame.getFocusedChild() instanceof VideoView) {
                VideoView video = (VideoView) frame.getFocusedChild();
                frame.removeView(video);
                video.start();
            }
        }

    }
};

Ответ 4

Встраивание проигрывателя YouTube в Android очень простое, и вам вряд ли понадобится 10 минут,

1) Enable YouTube API from Google API console
2) Download YouTube player Jar file
3) Start using it in Your app

Ниже приведены подробные шаги http://www.feelzdroid.com/2017/01/embed-youtube-video-player-android-app-example.html.

Просто напишите, и если вы столкнулись с какой-либо проблемой, сообщите мне, не помогите вам.

Ответ 5

Качество видео зависит от скорости соединения с использованием API

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