安卓YouTube应用播放视频意图

155

我创建了一个应用程序,可以在Android上下载YouTube视频。现在,我希望当您在YouTube本机应用程序中播放视频时,也可以下载它。为此,我需要知道YouTube本机应用程序发出的Intent以播放YouTube应用程序。
如果我在模拟器上安装了YouTube程序,那么我可以很容易地做到这一点,因此我的第一个问题是:
1. 我能否为我的模拟器下载YouTube应用程序,或者...
2. 当用户选择播放视频时使用的意图是什么。


嘿,我也在尝试制作一个YouTube视频下载器应用程序。所以,我想知道我是否需要获取任何API密钥,还是可以在我的应用程序中使用Webview?@ASP - Jaydip Kalkani
19个回答

3
如果已安装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 ) );

3

3
/**
 * 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

你也可以直接获取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;
}

在我的应用中运行良好。


请记住,谷歌不允许在Webview内播放YouTube视频。因为他们提供了YouTube API来在Android应用程序中播放YouTube视频。如果您在webview内播放YouTube视频,则谷歌将从Playstore中删除您的应用程序。 - santosh devnath

2

试试这个:

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

    }
  }
}

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

1
如果已安装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);
}

1

试试这个,

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

这个对我也没有起作用。模拟器中是否需要Flash播放器? - The iCoder

0

使用 Kotlin 扩展 更加容易。

fun Context.watchYoutube(id: String) {
    val appIntent = Intent(Intent.ACTION_VIEW, Uri.parse("vnd.youtube:$id"))
    val webIntent = Intent(
        Intent.ACTION_VIEW,
        Uri.parse("https://youtu.be/$id")
    )
    try {
        this.startActivity(appIntent)
    } catch (ex: ActivityNotFoundException) {
        this.startActivity(webIntent)
    }
}

然后你可以在 MainActivity.kt 中实现它,就像这样

fun onClickSomething(){
    val linkYoutubeId = "https://youtu.be/3s21Ynn4Huw".substringAfterLast("/")
    watchYoutube(linkYoutubeId)
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接