154

Android 用の YouTube 動画をダウンロードできるアプリを作成しました。今、YouTube のネイティブ アプリで動画を再生すると、ダウンロードもできるようにしたいと考えています。これを行うには、YouTube アプリを再生するために YouTube ネイティブ アプリが出力する Intent を知る必要があります。
エミュレーターに YouTube プログラムがあれば、これは簡単にできるので、最初の質問は次のとおりです。1. エミュレーター
用の YouTube アプリをダウンロードできますか、または...
再生用。

4

18 に答える 18

275

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

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);
    }
}  
于 2012-09-15T17:03:02.523 に答える
35

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

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アプリがインストールされているデバイスでのみ実行されるため、これは問題にはなりません。

于 2011-08-18T22:45:45.333 に答える
21

私のコードを使用してください..このコードを使用して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); 
于 2011-09-07T12:56:47.170 に答える
12
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 を置き換えることです。

于 2010-11-15T05:00:02.103 に答える
7

編集: 以下の実装は、少なくとも一部の 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 に伝えます。

于 2012-02-21T09:31:45.447 に答える
6

それを見つけた:

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) }
于 2009-03-18T19:41:04.000 に答える
5

古い質問に答えて、パッケージが変更されたことを皆さんに知らせるために、ここに更新があります

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

于 2011-07-21T18:45:55.433 に答える
5

別のアプリでビデオを実行する最も安全な方法は、最初にパッケージの解決を試みることです。つまり、アプリがデバイスにインストールされていることを確認します。したがって、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);
}
于 2017-02-17T00:12:55.327 に答える
3

Youtube にプレーヤー API が追加されました。ぜひお試しください。

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

于 2014-02-10T12:05:30.263 に答える
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 ) );
于 2017-11-06T13:40:12.253 に答える
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

    }
  }
}
于 2011-03-21T09:36:16.667 に答える
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;
}

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

于 2010-11-08T23:47:32.423 に答える
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");
于 2010-11-09T09:35:49.437 に答える