Youtubeビデオを表示するためにWebViewを使用していますが、これは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デバイスと、埋め込み(アプリ内)Youtubeビデオを表示するOSをサポートできる完全なコードを支援する場合)高品質。
更新:注意してください、私が探しているソリューションは高解像度のビデオを表示する必要があります。 VideoViewクラスを使用して、さまざまなデバイスとOSで動作するようになりましたが、ビデオの品質は十分ではありません。そのため、VideoViewやWebViewなどのソリューションは、高品質のYouTubeビデオを表示する場合にのみ受け入れられます。すべてのレスポンダーに感謝します!
公式の YouTube Android Player API 使用できます。これはもう少し複雑ですが、ウェブクライアントを使用する他のソリューションよりもうまく機能しています。
まず、アプリを Googles API Console で登録する必要があります。これは、アプリが1か月に25,000件を超えるリクエスト(またはそのようなもの)を取得するまで完全に無料です。リンクの下に完全な素晴らしいチュートリアルがあります。それらを理解していただければ幸いです。そうでない場合は、お問い合わせください! :)
youtube apiを使用するか、新しいインテントを呼び出してシステムに処理させることをお勧めします(つまり、youtubeアプリ)。ここでは、役立つコードをいくつか紹介します。
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)
{}
}
}
外観:
私の場合の最善の解決策。 Webビューのサイズに合うビデオが必要です。 動画IDで埋め込みYouTubeリンクを使用します。例:
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ビューxmlコード
<WebView
Android:id="@+id/youtube_web_view"
Android:layout_width="match_parent"
Android:layout_height="200dp"/>
それはこのように動作します:
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プレーヤーを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 .
参照してください。問題が発生した場合は、お知らせください。
非常に簡単:静的メソッド内に配置するだけです。
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(linkYouTube)));
ビデオの品質は、APIを使用した接続速度に依存します
または、API以外の場合は、YouTubeアプリを使用せずに、これに従うことができます link
この答えを参照してください: AndroidアプリケーションでYouTube埋め込みコードを再生するにはどうすればよいですか?
WebViews
を使用し、その中にiframe
をロードします...そして、はい動作します。