Android WebView - Youtube视频无法在应用内播放

时间:2015-08-25 04:12:23

标签: android video webview youtube

我有一个使用WebView显示网页的活动。在该页面中,有一个指向YouTube视频的链接(因此它不是我可以或需要嵌入的视频)。

问题是视频无法播放 - 当我点击播放按钮时,会出现一个错误页面 “ 网页无法显示 vnd.youtube网页:SVF8Ghl6d8xx 可能会暂时失败,等等等等!“

如果你知道我想要的话,请回答!我已经浏览了stackoverflow上的几乎所有相关帖子,所以不需要引用其他帖子/问题。

MainActivity.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);

    }

2 个答案:

答案 0 :(得分:4)

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

  2. 在左侧边栏上,选择API和API下的API。使用身份验证并为YouTube Data API v3启用状态。

  3. 在左侧边栏上,选择“公共API访问”下的“凭据”和“创建新密钥”。

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

  5. 将SHA-1键和项目的包名称用分号(;)分隔。

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

  7. 从这里下载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>
    

    您的活动应该是这样的

    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,并将其作为额外变量发送到此活动。

答案 1 :(得分:2)

您可以在应用中嵌入YouTube视频的最佳方式是使用Youtube API

  

YouTube Android播放器API可让您合并视频   在您的Android应用程序中播放功能。 API定义   加载和播放YouTube视频(和播放列表)的方法   自定义和控制视频播放体验。