web-dev-qa-db-ja.com

Android YouTubeアプリPlay Video Intent

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

137
Isaac Waller

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

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

これはデバイスで動作しますが、エミュレータで動作しません レミーの答え

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

この問題の解決方法は次のとおりです。

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アプリを搭載したデバイスでのみ動作するため、これは問題ではないはずです。

32

コードを使用します。このコードを使用して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); 
18
Soubhab Pathak
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を置き換えることです。

10
Sana

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

7
Lemmy

編集:以下の実装は、少なくともいくつかの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に、どのパッケージをインテントを開くことを好むかを伝えます。

6
Warpzit

それを見つけた:

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) }
5
Isaac Waller

パッケージが変更されたことを知らせるために、古い質問に返信します

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を呼び出すと、ユーザーはアクティビティセレクターを取得します。

4
Shardul

別のアプリで動画を実行する最も安全な方法は、最初にパッケージを解決すること、つまりアプリがデバイスにインストールされていることを確認することです。したがって、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);
}
3
Ahmad
/**
 * 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
Jared Rummler

YoutubeにはプレーヤーAPIがあります。試してみてください。

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

2
StarWars

これを試して:

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

    }
  }
}
1
premsagar

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

私のアプリでうまくいきました。

1
Auri Rahimzadeh

これは、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
RonTLV

これを試して、

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
Raju Jadhav

Youtubeアプリがインストールされている場合、Youtube Android player 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);
}
0
Manpreet

この関数は私のためにうまく機能します...関数に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
Manthan Patel