Android WebView - Youtube 视频不在应用程序中播放

标签 android video webview youtube

我有一个使用 WebView 显示网页的 Activity 。在该页面中,有一个指向 YouTube 视频的链接(因此我无法或不需要嵌入该视频)。

问题是视频无法播放 - 当我点击播放按钮时,出现一个错误页面说 “ 网页无法显示 vnd.youtube 上的网页:SVf8Ghl6d8xx 可能暂时停滞不前,等等等等!!!”

如果你知道我想要什么,请只回答!我几乎浏览了 stackoverflow 上的所有相关帖子,因此无需引用其他帖子/问题。

主 Activity .java

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


        // add the custom view to the action bar
        webView = (WebView) findViewById(R.id.webView1);
        webView.getSettings().setJavaScriptEnabled(true);

        if(Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR2)
            webView.getSettings().setPluginState(WebSettings.PluginState.ON);   //Helps flash run on a device

        webView.getSettings().setBuiltInZoomControls(true);

        webView.setWebViewClient(new WebViewClient ());
        webView.setWebChromeClient(new WebChromeClient());
        webView.getSettings().setUseWideViewPort(true);
        //webView.getSettings().setUseWideViewPort(false);
        webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
        webView.loadUrl(url);

    }

以下代码使其在 youtube 应用程序中运行,但我希望视频在我的应用程序中运行:(

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


        // add the custom view to the action bar
        webView = (WebView) findViewById(R.id.webView1);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setBuiltInZoomControls(true);

        if(Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR2)
                    webView.getSettings().setPluginState(WebSettings.PluginState.ON);


        webView.setWebViewClient(new WebViewClient () {
            @ Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (url.startsWith("vnd.youtube")){

                startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));

                return true;
            }
            else return false;

            }
        });

        webView.setWebChromeClient(new WebChromeClient());
        webView.getSettings().setUseWideViewPort(true);
        //webView.getSettings().setUseWideViewPort(false);
        webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
        webView.loadUrl(url);

    }

最佳答案

  1. 转到 Google Developer Console 并选择或创建一个新项目。

  2. 在左侧边栏中,选择 APIs & auth 下的 APIs 并为 YouTube Data API v3 打开状态。

  3. 在左侧边栏中,选择凭据并在公共(public) API 访问下创建新 key 。

  4. 当弹出窗口要求您选择平台时,选择 Android Key。

  5. 粘贴 SHA-1 key 和项目的包名称,以分号 (;) 分隔。

  6. 点击创建。现在您应该会在仪表板上看到 API KEY。

从这里下载 YouTubeAPI jar

https://developers.google.com/youtube/android/player/downloads/

创建这样的布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<com.google.android.youtube.player.YouTubePlayerView
    android:id="@+id/youtube_player"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/black"
    android:layout_centerInParent="true" />

  </RelativeLayout>

你的 Activity 应该看起来像这样

public class CustomYouTubePlayer extends YouTubeBaseActivity implements   YouTubePlayer.OnInitializedListener{


private String API_KEY="your key";
private String VIDEO_ID;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    /** attaching layout xml **/
    setContentView(R.layout.youtube_player);

    /** Initializing YouTube player view **/
    VIDEO_ID = getIntent().getExtras().getString(FinalVariables.YOUTUBE_ID);
    YouTubePlayerView youTubePlayerView = (YouTubePlayerView) findViewById(R.id.youtube_player);
    youTubePlayerView.initialize(API_KEY, this);
}

@Override
public void onInitializationSuccess(Provider provider, YouTubePlayer player, boolean wasRestored) {

    player.setShowFullscreenButton(false);
    /** add listeners to YouTubePlayer instance **/
    player.setPlayerStateChangeListener(playerStateChangeListener);
    player.setPlaybackEventListener(playbackEventListener);

    /** Start buffering **/
    if (!wasRestored) {
        player.loadVideo(VIDEO_ID);
    }
}
private YouTubePlayer.PlaybackEventListener playbackEventListener = new YouTubePlayer.PlaybackEventListener() {

    @Override
    public void onBuffering(boolean arg0) {
    }

    @Override
    public void onPaused() {
    }

    @Override
    public void onPlaying() {
    }

    @Override
    public void onSeekTo(int arg0) {
    }

    @Override
    public void onStopped() {
    }

};

 private YouTubePlayer.PlayerStateChangeListener playerStateChangeListener = new YouTubePlayer.PlayerStateChangeListener() {

    @Override
    public void onAdStarted() {
    }

    @Override
    public void onError(YouTubePlayer.ErrorReason arg0) {
    }

    @Override
    public void onLoaded(String arg0) {
    }

    @Override
    public void onLoading() {
    }

    @Override
    public void onVideoEnded() {
        finish();
    }

    @Override
    public void onVideoStarted() {
    }
};
} 

只需传递视频 ID,就这么简单..

编辑

如果这是您的 YouTube 链接 https://www.youtube.com/watch?v=rql_F8H3h9E 然后是您的video_id=rql_F8H3h9E 从 YouTube 链接中提取您的视频 ID,并将其作为额外变量发送到此 Activity 。

关于Android WebView - Youtube 视频不在应用程序中播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32195399/

相关文章:

java - 应用程序已停止-Android studio

java - Android多线程预加载imageview(uri)

android - 约束布局在应用程序运行时不显示来自 ImageView 的图像

java - 无法在 Android WebView 中加载本地 HTML 文件

c# - WinRT/Metro/WSA 向 WebView 提供来自 ZipArchive 的流的问题

java - 加载 webview 时错误膨胀类 android.webkit.WebView

android - 是否可以在元标记中将内容宽度设置为 100%

audio - 添加背景音频后的ffmpeg问题

HTML5 Canvas - 镜像视频部分

video - 如何将各种视频文件格式转换为 FLV(用于 FlowPlayer)?