Android YouTube应用播放视频意图

时间:2009-02-22 02:37:18

标签: android youtube android-intent emulation

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

18 个答案:

答案 0 :(得分:241)

这是怎么回事:

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

答案 1 :(得分:167)

这适用于设备,而不是模拟器Lemmy's answer

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

答案 2 :(得分:32)

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

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应用程序的设备,所以这应该不是问题。

答案 3 :(得分:18)

使用我的代码..我可以使用此代码播放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); 

答案 4 :(得分:10)

    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。

答案 5 :(得分:7)

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

答案 6 :(得分:6)

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

以下是旧的实施:

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我更喜欢打开我的意图。

答案 7 :(得分:5)

找到它:

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

答案 8 :(得分:4)

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

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选择器。

答案 9 :(得分:3)

在不同应用上运行视频的最安全方法是先尝试解析该软件包,换句话说,检查该应用是否已安装在该设备上。因此,如果您想在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);
}

答案 10 :(得分:2)

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

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

答案 11 :(得分:2)

/**
 * 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;
}

答案 12 :(得分:1)

试试这个:

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

    }
  }
}

答案 13 :(得分:1)

您也可以抓住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;
}

在我的应用中工作正常。

答案 14 :(得分:0)

试试这个,

       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");

答案 15 :(得分:0)

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

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

答案 16 :(得分:0)

这个功能对我来说很好......只需在函数中传递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);
                }
}

答案 17 :(得分:0)

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

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