Android YouTube uygulaması Play Video Niyeti


148

Android için YouTube videolarını indirebileceğiniz bir uygulama oluşturdum. Şimdi, YouTube yerel uygulamasında bir video oynattığınızda da indirebilmenizi istiyorum. Bunu yapmak için YouTube uygulamasını oynatmak için YouTube yerel uygulamasının koyduğu Niyeti bilmem gerekiyor.
Emülatörümde YouTube programı olsaydı bunu kolayca yapabilirim, bu yüzden ilk sorum şu:
1. Emülatörüm için YouTube uygulamasını indirebilir miyim veya ...
2. Kullanıcı bir video seçtiğinde kullanılan amaç nedir? oynatma için.


hey, ben de bir youtube video indirici uygulaması yapmaya çalışıyorum. Yani, ben bunun için herhangi bir api anahtarı almak zorunda bilmek ya da sadece benim app webview kullanabilirsiniz bilmek istiyorum ?? @ASP
Jaydip Kalkani

Yanıtlar:


263

Ve buna ne dersiniz:

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

Not: Bu yöntemi kullanırken dikkat edin, YouTube spam nedeniyle kanalınızı askıya alabilir, bu benimle iki kez oldu


5
YouTube uygulamasını varsa destekleme ve gerekirse web tarayıcısına geri dönme sahne. Bu soruya gelenler için bu cevaptır.
Luke Sapan

Anahtar kelime yoluyla arama için youtube uygulaması nasıl başlatılır? Ben youtube uygulaması başlatılmasını istiyorum ve daha sonra "steve işleri" için arama
Rusheel Jain

@RusheelJain bu yeni bir sorun olurdu. Yapacağım şey "android youtube niyet arama metni" ya da bunun gibi bir şey aramaktır.
voghDev

2
IMHO bu kabul edilen cevap olmalı. Çok teşekkürler!
Nacho L.

1
Bu cevap ama belki fonksiyon bildiriminde statik çıkarmalısınız
Ampersanda

176

Bu bir cihazda çalışır, ancak Lemmy'nin cevabı başına emülatörde çalışmaz .

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

Bu benim için kazanan oldu, yüklü youtube uygulaması varsa bunu kullanmak isteyip istemediğinizi sorar.
Tristan Warner-Smith

bu kodu kullanın youtube ve tarayıcı için niyet seçici olsun. nasıl gizlenir? Ben sadece doğrudan youtube oynatıcıya bağlamanız gerekir.
Praveen

@Praveen Chandrasekaran youtube uygulaması mevcut olmayabilir - Niyeti kullanmak ve sistemin hangi yüklü uygulamaların isteği desteklediğini öğrenmesine izin vermek en iyisidir.
cofiem

3
StartActivity'yi çağırmadan önce Niyette setClassName'i aramanız gerekir, örneğin: intent.videoClient.setClassName ("com.google.android.youtube", "com.google.android.youtube.PlayerActivity"); Çalışma kodu örneği için Sana'nın cevabına bakınız.
Simetrik

Bu, youtube uygulaması yüklü gerçek bir cihazda benim için çalışmıyor. Hala web tarayıcısını açar. Yine de Bibbity'nin yaklaşımı işe yarıyor. Ya da belki Simetrik'in yorumu, bunu denemedi.
Mathias Conradt

33

Bu sorunu şu şekilde çözdüm:

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

Şimdi biraz daha araştırma yaptım, iki nokta üst üste iki eğik çizgi yerine sadece 'vnd.youtube:VIDEO_ID' ihtiyacım var gibi görünüyor (':' vs. ': //'):

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

Buradaki önerilerin çoğunu denedim ve istisnaları artıran varsayılan "doğrudan" yöntemlerle gerçekten çok iyi çalışmadılar. Yöntemimle YouTube uygulaması yüklü DEĞİLSE işletim sisteminin uygulamayı çökmekten başka varsayılan bir geri dönüş konumuna sahip olduğunu varsayabilirim. Uygulama teorik olarak sadece YouTube uygulaması olan cihazlarda çalışıyor, bu yüzden bu bir sorun değil.


Merhaba, Uygulamada youtube videolarını oynatmak yerine YouTube'da oynatmak mümkün mü?
Akrep

@Scorpion Böyle bir olasılıkla youtube API'si var.
Matthewek

1
Harika çalışıyor! Ama ilk satırda bir tane doğru parantez eksik.
KostasC

18

Kodumu kullanın .. Ben bu kodu kullanarak youtube video oynatabiliyorum ... sadece "videoId" değişken youtube video kimliği sağlamanız gerekir ....

String videoId = "Fee5vbFLYM4";
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("vnd.youtube:"+videoId)); 
intent.putExtra("VIDEO_ID", videoId); 
startActivity(intent); 

3
Bu, doğrudan YouTube uygulamasını başlatır ve JellyBean'da krom ve YouTube arasında seçim yapabileceğiniz seçim menüsünü atlar.
r1k0

2
@ r1k0 Evet .... Bu kod, youtube videosunu her türlü android işletim sisteminde (yalnızca JellyBean'da değil) oynatmak için doğrudan varsayılan Youtube uygulamasını başlatır.
Soubhab Pathak

1
Birden fazla youtube oynatıcı uygulamanız (örnek Firetube) varsa, yine de seçim yapmanızı sağlar. Sadece söyleyin ve netleştirin.
jj_

11
Intent videoClient = new Intent(Intent.ACTION_VIEW);
videoClient.setData(Uri.parse("http://m.youtube.com/watch?v="+videoId));
startActivityForResult(videoClient, 1234);

Oynatılması videoIdgereken youtube videosunun video kimliği nerede . Bu kod Motorola Milestone'da iyi çalışıyor .

Ancak temel olarak yapabileceğimiz, Youtube uygulamasını başlattığınızda hangi etkinliğin yüklendiğini kontrol etmek ve buna göre packageName ve className'in yerini almaktır.


Aşağıdaki hatayı alıyorum. 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? Lütfen bunu çözün.
Vinothkumar Arputharaj

Cihazınız nedir? Bu etkinlik adı yalnızca bir Motorola Kilometre Taşı için özeldir, ancak youtube etkinliği eklentisinin etkinlik adını USB hata ayıklama modunda cihazınızda görmek ve Youtube Uygulamasını tıkladığınızda LogCat'i görmek istiyorsanız. Size etkinlik adıyla birlikte paket adını verir.
Sana

7

Youtube'un (ve Market uygulamasının) yalnızca Google'ın G1 ve G2 için yayınladığı özel ROM'larla kullanılması gerekiyor. Bu yüzden onları ne yazık ki Emulator'da kullanılan gibi bir OpenSource-ROM'da çalıştıramazsınız. Belki yapabilirsin, ama resmi olarak desteklenemez.


Desteklenmeyen yolu biliyor musunuz?
Isaac Waller

Üzgünüm hayır. Sadece olasılığı göz ardı etmek istemiyordum.
Lemmy

6

EDIT: Aşağıdaki uygulama en azından bazı HTC cihazlarda (çöktü) sorunlar olduğunu kanıtladı. Bu nedenle setclassname kullanmıyorum ve eylem seçici menüsüne bağlı kalmıyorum. Eski uygulamamı kullanmaktan kesinlikle vazgeçiyorum.

Eski uygulama aşağıdadır:

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

Yardımcı Program aşağıdaki yöntemle kendi kişisel yardımcı program sınıfım olduğunda:

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

Öncelikle youtube'un yüklü olup olmadığını kontrol ediyorum, yüklü ise, android'e niyetimi açmayı tercih ettiğim paketi söylüyorum.


Yardımcı Program nedir? Bunu kullanılabilir bir ithalat olarak görmüyorum.
IgorGanapolsky

EDIT için +1. Açık bir sınıf adı kullanmak kesinlikle güvenilmezdir.
Giulio Piancastelli

5

Bulundu:

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

Müthiş! Bunun için bir yayın alıcısı oluşturdunuz mu?
Dan

4

Eski soruya cevap vermek, sadece paketin değiştiğini size bildirmek için güncelleme heres

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

Bu çok iyi çalışıyor, ancak geçerli youtube URL'si ile ACTION_VIEW ile normal Niyeti aradığınızda, Etkinlik seçiciyi yine de alır.


3

Videoları farklı bir uygulamada çalıştırmanın en güvenli yolu, öncelikle paketi çözümlemeye çalışmaktır, başka bir deyişle, uygulamanın cihazda yüklü olup olmadığını kontrol etmektir. Yani youtube'da bir video çalıştırmak istiyorsanız böyle bir şey yaparsınız:

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

Ayrıca sadece 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;
}

Benim app iyi çalıştı.


Bunu her zaman unutmayın - Google, Webview içinde youtube videosunun oynatılmasına asla izin vermez. Çünkü Android App Youtube video oynatmak için Youtube API sağlarlar. Youtube videosunu web görünümünde oynatacaksanız Google, uygulamanızı Playstore'dan kaldıracaktır.
santosh devnath

1

Bunu dene:

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

Bu, youtube uygulaması yüklüyse çalışır. Değilse, başka bir uygulama seçmek için bir seçici görünecektir:

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

Bunu dene,

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

Bu benim için de işe yaramadı. Emülatörde flash player ihtiyacı var mı?
11:15

0

Bu işlev benim için iyi çalışıyor ... sadece url dizesini işlevde geçir:

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 uygulaması yüklüyse videoyu oynatmak için Youtube Android oynatıcı API'sini kullanabilirsiniz, aksi takdirde kullanıcıdan mevcut web tarayıcılarından seçim yapmasını isteyin.

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);
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.