Android YouTubeアプリPlay Video Intent


148

Android向けYouTube動画をダウンロードできるアプリを作成しました。さて、YouTubeネイティブアプリで動画を再生するとダウンロードできるようにしたいと思っています。これを行うには、YouTubeアプリを再生するためにYouTubeネイティブアプリが出すインテントを知る必要があります。
エミュレータにYouTubeプログラムがある場合、これは簡単にできるので、最初の質問は次のとおり
です。1。エミュレータ用のYouTubeアプリをダウンロードできますか
?2.ユーザーがビデオを選択するときに使用されるインテントは何ですか?再生用。


ねえ、私もyoutubeビデオダウンローダーアプリを作ろうとしています。それで、そのためのAPIキーを取得する必要があること、または単にアプリでwebviewを使用できることを知りたいですか?@ASP
Jaydip

回答:


263

そして、これはどうですか:

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

注:この方法を使用している場合、YouTubeがスパムのためにチャンネルを一時停止する場合があります。これは私と2回発生しました


5
YouTubeアプリが利用可能な場合はサポートし、必要に応じてウェブブラウザにフォールバックするための小道具。この質問に来る人にとって、これは使用する答えです。
ルークサパン

キーワードなどで検索するためにYouTubeアプリを起動する方法 YouTubeアプリを起動して、「スティーブジョブ」を検索したい
Rusheel Jain

新しい問題となる@RusheelJain。私がやろうとしていることは、「android youtube intent search text」またはそのようなものを検索することです。
voghDev 2015年

2
私見これは受け入れられる答えであるべきです。どうもありがとう!
Nacho L.

1
これが答えですが、おそらく関数宣言でstaticを削除する必要があります
Ampersanda

176

これはデバイスで機能しますレミーの回答によるとエミュレータは機能しません。

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

これは私にとって勝者でした。YouTubeアプリをインストールしている場合は、代わりに使用するかどうかを尋ねられます。
Tristan Warner-Smith

このコードを使用して、YouTubeとブラウザーのインテントチューザーを取得します。それを隠す方法?YouTubeプレーヤーに直接リンクする必要があるだけです。
Praveen

@Praveen Chandrasekaran YouTubeアプリが利用できない可能性があります-インテントを使用して、インストールされているどのアプリがリクエストをサポートしているかをシステムに確認させるのが最善です。
cofiem

3
次のように、startActivityを呼び出す前に、IntentでsetClassNameを呼び出す必要があります。実際のコード例については、Sanaの回答を参照してください。
対称的な

これは、YouTubeアプリがインストールされている実際のデバイスでは機能しません。それでもWebブラウザは開きます。ただし、以下のBibbityによるアプローチは機能します。あるいは、Symmetricのコメントを試していないかもしれません。
Mathias Conradt

33

これが私がこの問題を解決した方法です:

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

もう少し調査を行ったので、コロンの後の2つのスラッシュではなく、 'vnd.youtube:VIDEO_ID'だけが必要なようです( ':'と '://'の比較)。

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

私はここでほとんどの提案を試みましたが、それらは例外を発生させるすべての想定される「直接」メソッドでは実際にはうまく機能しませんでした。私の方法では、YouTubeアプリがインストールされていない場合、OSにはアプリのクラッシュ以外のデフォルトのフォールバック位置があると思います。理論的には、アプリはYouTubeアプリがインストールされているデバイスでのみ動作するため、これは問題にはなりません。


こんにちは、Webviewで再生するのではなく、アプリでYouTube動画を再生することはできますか?
スコーピオン

@Scorpionそんな可能性のあるyoutube APIがあります。
Matthewek 2013年

1
それはうまくいきます!しかし、最初の行に右括弧が1つありません。
KostasC 2016年

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

3
これにより、JellyBeanでChromeとYouTubeのどちらかを選択できる選択メニューをバイパスして、YouTubeアプリケーションが直接起動します。
r1k0

2
@ r1k0はい....このコードは、デフォルトのYoutubeアプリを直接起動して、すべてのタイプのAndroid Oses(JellyBeanだけでなく)でYouTubeビデオを再生します。
Soubhab Pathak 2012

1
複数のYouTubeプレーヤーアプリ(Firetubeなど)がある場合でも、選択できます。ただ言ってそれを明確にするだけです。
jj_

11
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を置き換えることができます。


次のエラーが発生します。 ERROR/AndroidRuntime(1519): Caused by: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.google.android.youtube/com.google.android.youtube.PlayerActivity}; have you declared this activity in your AndroidManifest.xml? これを解決してください。
Vinothkumar Arputharaj 2011年

あなたのデバイスは何ですか?このアクティビティ名はMotorolaマイルストーンに固有のものですが、デバイスのUSBデバッグモードでYouTubeアクティビティプラグのアクティビティ名を表示したい場合は、YouTubeアプリをクリックするとLogCatが表示されます。パッケージ名alognとアクティビティ名が表示されます。
サナ

7

Youtube(およびマーケットアプリケーション)は、GoogleがG1およびG2向けにリリースした特別なROMでのみ使用されることになっています。そのため、残念ながら、エミュレータで使用されているようなOpenSource-ROMでは実行できません。まあ、可能かもしれませんが、公式にサポートされている方法ではありません。


サポートされていない方法を知っていますか?
Isaac Waller

申し訳ありません。可能性を排除したくなかっただけです。
レミー

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に伝えます。


ユーティリティとは?利用可能なインポートとは思わない。
IgorGanapolsky

EDITの+1。明示的なクラス名を使用することは間違いなく信頼できません。
Giulio Piancastelli 2012年

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

驚くばかり!では、このためのブロードキャストレシーバーを作成しただけですか?
Dan

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で通常のインテントを呼び出すと、ユーザーはとにかくアクティビティセレクターを取得します。


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


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

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

私のアプリでは問題なく動作しました。


alwasy-Googleでは、Webview内でのyoutubeビデオの再生を許可していません。AndroidアプリでYoutubeビデオを再生するためのYoutube APIを提供しているからです。YoutubeビデオをWebビュー内で再生する場合、GoogleはPlaystoreからアプリケーションを削除します。
santosh devnath

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

    }
  }
}

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

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

これもうまくいきません。エミュレータにFlash Playerの要件はありますか?
iCoder

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

0

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);
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.