在Android应用内embeddedYoutubevideo

我正在使用WebView来显示embedded的Youtubevideo,这在Galaxcy S2(OS 2.3.5)上工作,而不是在Nexus S(OS 2.3.4)上,我得到的只是没有任何video显示的白色屏幕。

这里是我使用的代码片段和Manifest文件中的声明:

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”是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设备和操作系统显示高品质的embedded式(应用程序)Youtubevideo。

更新:注意,我正在寻找的解决scheme应该显示高分辨率的video。 我使用VideoView类在不同的设备和操作系统上工作,但video质量不够好。 因此,任何解决scheme,包括VideoView或WebView或任何其他方式将被接受,只有当它使高品质的YouTubevideo显示。 感谢所有的回应者!

Solutions Collecting From Web of "在Android应用内embeddedYoutubevideo"

有一个官方的YouTube Android播放器API,你可以使用。 这有点复杂,但比其他使用webclient的解决scheme更好。

首先,您必须在Google Apps API控制台中注册您的应用程序。 这是完全免费的,直到你的应用程序获得超过25k的请求一个月(或类似的东西)。 链接下有完整的教程。 我希望你能理解他们。 如果没有,问! 🙂

虽然我build议使用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) {} } } 

它是这样工作的:

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

在YouTube中embeddedYouTube播放器非常简单,几乎不需要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

只要提及它,如果你面对任何问题,让我知道,虐待帮助你

video质量取决于使用API​​的连接速度

或者除了API以外的其他方式,没有YouTube应用程序,您可以按照此链接

请参考这个答案: 我们如何使用webview在Android应用程序中播放YouTubeembedded代码?

它使用WebViews并加载一个iframe …是的,它的工作原理。

使用谷歌的YouTubeembeddedAPI 。