web-dev-qa-db-de.com

Betten Sie Youtube-Videos in eine Android-App ein

Ich verwende ein WebView zum Anzeigen von eingebettetem Youtube-Video, das unter Galaxcy S2 (OS 2.3.5) und nicht unter Nexus S (OS 2.3.4) funktioniert. Ich bekomme nur einen weißen Bildschirm ohne Videoanzeige.

Hier ist der Code-Ausschnitt, den ich verwende, und die Deklarationen in der Manifest-Datei:

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;
}

Hinweis: Der Parameter "selected_video" ist der Hash des Videos (VideoID).

Die Erklärungen in der Manifest-Datei:

<?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"  >

    .
    .

Bitte lassen Sie es mich wissen, falls Sie etwas erkennen, das ich in meinem Code ändern sollte, oder helfen Sie mit einem vollständigen Code, der alle Android-Geräte und Betriebssysteme zur Anzeige eingebetteter (In-App) Youtube-Videos mit hoher Qualität unterstützen kann.

UPDATE: Passen Sie auf, die Lösung, die ich suche, sollte hochauflösendes Video anzeigen. Ich habe es auf den verschiedenen Geräten und Betriebssystemen mit der VideoView-Klasse gemacht, aber die Videoqualität ist nicht gut genug. Daher wird jede Lösung, einschließlich VideoView oder WebView oder auf andere Weise, nur akzeptiert, wenn hochwertige YouTube-Videos angezeigt werden. Vielen Dank an alle Responder! 

26
Idan

es gibt eine offizielle YouTube Android Player API die Sie verwenden können. Dies ist etwas komplizierter, funktioniert jedoch besser als andere Lösungen, die Webclients verwenden.

Zuerst müssen Sie Ihre App in Googles API Console registrieren. Dies ist völlig kostenlos, bis Ihre App mehr als 25.000 Anfragen pro Monat erhält (oder ähnliches). Es gibt vollständige und tolle Tutorials unter dem Link. Ich hoffe du kannst sie verstehen. Wenn nicht, bitte fragen! :)

36
raptor

obwohl ich vorschlage, youtube api zu verwenden oder new intent aufzurufen und das system damit umgehen zu lassen (d. h. youtube app), hier etwas code, der ihnen helfen kann, hat einen aufruf einer versteckten methode, da webview nicht angehalten und fortgesetzt werden kann

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)
        {}
    }
}
4
sherpya

Es funktioniert so:

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();
            }
        }

    }
};
3
VINIL SATRASALA

Wie es aussieht:

 enter image description here

Beste Lösung für meinen Fall. Ich brauche Video-Fit-Web-View-Größe .Verwenden Sie den eingebetteten Youtube-Link mit Ihrer Video-ID.Beispiel:

WebView youtubeWebView; //todo find or bind web view
String myVideoYoutubeId = "-bvXmLR3Ozc";

outubeWebView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                return false;
            }
        });

WebSettings webSettings = youtubeWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setLoadWithOverviewMode(true);
webSettings.setUseWideViewPort(true);

youtubeWebView.loadUrl("https://www.youtube.com/embed/" + myVideoYoutubeId);

Web-Ansichts-XML-Code

<WebView
        Android:id="@+id/youtube_web_view"
        Android:layout_width="match_parent"
        Android:layout_height="200dp"/>

Das Einbetten des YouTube-Players in Android ist sehr einfach und dauert kaum 10 Minuten. 

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

Hier sind die detaillierten Schritte http://www.feelzdroid.com/2017/01/embed-youtube-video-player-Android-app-example.html

Verweisen Sie es einfach und wenn Sie auf ein Problem stoßen, lassen Sie es mich wissen

1
Naruto

Ganz einfach: Fügen Sie einfach eine statische Methode ein.

startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(linkYouTube)));
0
Thiago Silva

Die Videoqualität hängt von der Verbindungsgeschwindigkeit mithilfe der API ab

alternativ für andere als API-Mittel ohne YouTube-App können Sie diesem Link folgen

0
Trikaldarshi

Siehe diese Antwort: Wie können wir YouTube-eingebetteten Code in einer Android-Anwendung mithilfe von Webview abspielen?

Es verwendet WebViews und lädt eine iframe darin ... und ja, es funktioniert.

0
Kamran Ahmed