首页 文章

Android YouTube应用播放视频意图

提问于
浏览
128

我创建了一个应用程序,您可以在其中下载Android视频 . 现在,我想要它,以便如果您在YouTube原生应用中播放视频,您也可以下载它 . 为此,我需要了解YouTube原生应用推出的Intent才能播放YouTube应用 .
如果我在我的模拟器上安装了YouTube程序,我可以轻松地做到这一点,所以我的第一个问题是:
1.我可以为我的模拟器下载YouTube应用,还是......
2.当用户选择要播放的视频时使用的意图是什么 .

18 回答

  • 167

    那怎么样:

    public static void watchYoutubeVideo(Context context, String id){
        Intent appIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("vnd.youtube:" + id));
        Intent webIntent = new Intent(Intent.ACTION_VIEW,
                    Uri.parse("http://www.youtube.com/watch?v=" + id));
        try {
            context.startActivity(appIntent);
        } catch (ActivityNotFoundException ex) {
            context.startActivity(webIntent);
        }
    }
    
  • 2

    这将适用于设备,但不适用于Lemmy's answer的模拟器 .

    startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.youtube.com/watch?v=cxLG2wtE7TM")));
    
  • 229

    这是我解决这个问题的方法:

    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("vnd.youtube://" + video_id));
    startActivity(intent);
    

    现在我已经做了更多的研究,看起来我只需要'vnd.youtube:VIDEO_ID'而不是冒号后的两个斜杠(':'vs.'://'):

    http://it-ride.blogspot.com/2010/04/android-youtube-intent.html

    我在这里尝试了大部分建议,并且它们并没有真正用于所有假设的“直接”方法提高异常 . 我认为,根据我的方法,如果未安装YouTube应用程序,操作系统会有一个默认的后备位置,而不是崩溃应用程序 . 该应用程序理论上只适用于装有YouTube应用程序的设备,所以这应该是一个非问题 .

  • 4

    使用我的代码..我可以使用此代码播放youtube视频...您只需要在“videoId”变量中提供youtube视频ID ....

    String videoId = "Fee5vbFLYM4";
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("vnd.youtube:"+videoId)); 
    intent.putExtra("VIDEO_ID", videoId); 
    startActivity(intent);
    
  • 3
    Intent videoClient = new Intent(Intent.ACTION_VIEW);
        videoClient.setData(Uri.parse("http://m.youtube.com/watch?v="+videoId));
        startActivityForResult(videoClient, 1234);
    

    其中videoId是必须播放的YouTube视频的视频ID . 此代码适用于Motorola Milestone .

    但基本上我们可以做的是检查启动Youtube应用程序时加载的活动,并相应地替换packageName和className .

  • 31

    Youtube(和Market应用程序)只能用于特殊的ROM,Google为G1和G2发布了这些ROM . 所以你不能在OpenSource-ROM中运行它们,就像在模拟器中使用的那样,很遗憾 . 好吧,也许你可以,但不是以官方支持的方式 .

  • 1

    找到了:

    03-18 12:40:02.842: INFO/ActivityManager(68): Starting activity: Intent { action=android.intent.action.VIEW data=(URL TO A FLV FILE OF THE VIDEO) type=video/* comp={com.google.android.youtube/com.google.android.youtube.YouTubePlayer} (has extras) }
    
  • 0

    编辑:以下实施证明至少在一些HTC设备上有问题(它们崩溃了) . 因此我不使用setclassname并坚持使用动作选择器菜单 . 我强烈反对使用旧的实现 .

    Following is the old implementation:

    Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse(youtubelink));
                    if(Utility.isAppInstalled("com.google.android.youtube", getActivity())) {
                        intent.setClassName("com.google.android.youtube", "com.google.android.youtube.WatchActivity");
                    }
                    startActivity(intent);
    

    Utility是我自己的个人实用程序类,具有以下方法:

    public static boolean isAppInstalled(String uri, Context context) {
        PackageManager pm = context.getPackageManager();
        boolean installed = false;
        try {
            pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES);
            installed = true;
        } catch (PackageManager.NameNotFoundException e) {
            installed = false;
        }
        return installed;
    }
    

    首先我检查你是否安装了youtube,如果安装了,我告诉android我更喜欢打开我的意图 .

  • 10

    回答旧问题,只是为了通知你们这些包已经改变了,继续更新

    Intent videoClient = new Intent(Intent.ACTION_VIEW);
    videoClient.setData("VALID YOUTUBE LINK WITH HTTP");
    videoClient.setClassName("com.google.android.youtube", "com.google.android.youtube.WatchActivity");
    startActivity(videoClient);
    

    这非常有效,但是当您使用有效的youtube URL调用带有ACTION_VIEW的正常Intent时,用户仍会获得Activity选择器 .

  • 1

    在不同的应用程序上运行视频最安全的方法是首先尝试解析程序包,换句话说,检查应用程序是否已安装在设备上 . 所以如果你想在youtube上运行一个视频你会做这样的事情:

    public void playVideo(String key){
    
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("vnd.youtube:" + key));
    
        // Check if the youtube app exists on the device
        if (intent.resolveActivity(getPackageManager()) == null) {
            // If the youtube app doesn't exist, then use the browser
            intent = new Intent(Intent.ACTION_VIEW,
                    Uri.parse("http://www.youtube.com/watch?v=" + key));
        }
    
        startActivity(intent);
    }
    
  • 0

    Youtube现在有一个玩家api,你应该尝试一下 .

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

  • 7
    /**
     * Intent to open a YouTube Video
     * 
     * @param pm
     *            The {@link PackageManager}.
     * @param url
     *            The URL or YouTube video ID.
     * @return the intent to open the YouTube app or Web Browser to play the video
     */
    public static Intent newYouTubeIntent(PackageManager pm, String url) {
        Intent intent;
        if (url.length() == 11) {
            // youtube video id
            intent = new Intent(Intent.ACTION_VIEW, Uri.parse("vnd.youtube://" + url));
        } else {
            // url to video
            intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
        }
        try {
            if (pm.getPackageInfo("com.google.android.youtube", 0) != null) {
                intent.setPackage("com.google.android.youtube");
            }
        } catch (NameNotFoundException e) {
        }
        return intent;
    }
    
  • 2

    你也可以 grab WebViewClient

    wvClient = new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
      if (url.startsWith("youtube:")) {
        String youtubeUrl = "http://www.youtube.com/watch?v="
        + url.Replace("youtube:", "");
      startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(youtubeUrl)));
    }
    return false;
    }
    

    在我的应用程序中工作得很好 .

  • 0

    试试这个:

    public class abc extends Activity implements OnPreparedListener{
    
      /** Called when the activity is first created. */
    
      @Override
        public void onCreate(Bundle savedInstanceState)
      {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.youtube.com/watch?v=cxLG2wtE7TM")));          
    
    
        @Override
          public void onPrepared(MediaPlayer mp) {
            // TODO Auto-generated method stub
    
        }
      }
    }
    
  • 5

    试试这个,

    WebView webview = new WebView(this); 
    
           String htmlString = "<html> <body> <embed src=\"youtube link\"; type=application/x-shockwave-flash width="+widthOfDevice+" height="+heightOfDevice+"> </embed> </body> </html>";
    
           webview.loadData(htmlString ,"text/html", "UTF-8");
    
  • 0

    如果安装了youtube app,这将有效 . 如果没有,选择器将显示选择其他应用程序:

    Uri uri = Uri.parse( "https://www.youtube.com/watch?v=bESGLojNYSo" );
    uri = Uri.parse( "vnd.youtube:" + uri.getQueryParameter( "v" ) );
    startActivity( new Intent( Intent.ACTION_VIEW, uri ) );
    
  • 18

    这个函数适合我...只需在函数中传递url字符串:

    void watch_video(String url)
    {
        Intent yt_play = new Intent(Intent.ACTION_VIEW, Uri.parse(url))
        Intent chooser = Intent.createChooser(yt_play , "Open With");
    
        if (yt_play .resolveActivity(getPackageManager()) != null) {
                        startActivity(chooser);
                    }
    }
    
  • 5

    如果安装了Youtube应用程序,您可以使用Youtube Android播放器API播放视频,否则只需提示用户从可用的Web浏览器中进行选择 .

    if(YouTubeIntents.canResolvePlayVideoIntent(mContext)){
                        mContext.startActivity(YouTubeIntents.createPlayVideoIntent(mContext, mVideoId));
                    }
                    else {
                        Intent webIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.youtube.com/watch?v=" + mVideoId));
                        mContext.startActivity(webIntent);
                    }
    

相关问题