2009-02-22 20 views
113

J'ai créé une application dans laquelle vous pouvez télécharger des vidéos YouTube pour Android. Maintenant, je le veux afin que si vous jouez une vidéo dans l'application native de YouTube, vous pouvez le télécharger aussi. Pour ce faire, j'ai besoin de connaître l'intention que l'application native de YouTube met en place afin de jouer à l'application YouTube.
Je pourrais le faire facilement si j'avais le programme YouTube sur mon émulateur, donc ma première question est:
1. Puis-je télécharger l'application YouTube pour mon émulateur, ou ...
2. Quelle est l'intention utilisée lorsque l'utilisateur sélectionne une vidéo pour la lecture.Application YouTube pour Android Play Video Intent

+0

Cela pourrait aider aussi http://www.gadgetsaint.com/android/play-youtube-android-youtube-player-api/ – ASP

Répondre

7

Les applications Youtube (et Market) ne sont supposées être utilisées qu'avec des ROM spéciales, que Google a publiées pour le G1 et le G2. Vous ne pouvez donc pas les exécuter dans une OpenSource-ROM, comme celle utilisée dans l'émulateur, malheureusement. Eh bien, peut-être que vous le pouvez, mais pas officiellement.

+0

Connaissez-vous le chemin non pris en charge? –

+0

Désolé, non. Je ne voulais pas exclure la possibilité. – Lemmy

5

Je l'ai trouvé:

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

Génial! Alors avez-vous créé un récepteur de diffusion pour cela? – Dan

162

Cela fonctionne sur un dispositif mais pas l'émulateur par Lemmy's answer.

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

Ce fut le gagnant pour moi, si vous avez installé l'application youtube, il vous demande si vous voulez l'utiliser à la place. –

+0

utiliser ce code je reçois le sélecteur d'intention pour youtube et navigateur. comment le cacher? J'ai juste besoin de relier directement au lecteur YouTube. – Praveen

+0

@Praveen Chandrasekaran l'application youtube peut ne pas être disponible - il est préférable d'utiliser l'intention, et laissez le système déterminer quelles applications installées prennent en charge la demande. – cofiem

1

Vous pouvez aussi saisir le 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; 
} 

bien dans mon travaillé app.

0

Essayez ceci,

 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

Cela ne fonctionne pas pour moi. – herbrandson

+0

Cela ne fonctionne pas non plus pour moi. Existe-t-il une exigence de Flash Player dans l'émulateur. –

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

où videoId est l'ID vidéo de la vidéo sur youtube qui doit être joué. Ce code fonctionne très bien sur Motorola Milestone.

Mais, fondamentalement, ce que nous pouvons faire est de vérifier quelle activité est chargée lorsque vous démarrez l'application Youtube et de remplacer en conséquence le nom du paquet et le nom de la classe.

+0

Je reçois l'erreur suivante. 'ERROR/AndroidRuntime (1519): Causée par: android.content.ActivityNotFoundException: Impossible de trouver la classe d'activité explicite {com.google.android.youtube/com.google.android.youtube.PlayerActivity}; avez-vous déclaré cette activité dans votre AndroidManifest.xml? ' Veuillez résoudre ce problème. –

+0

Quel est votre appareil? Ce nom d'activité n'est spécifique qu'à un Milestone Motorola, mais si vous souhaitez voir le nom de l'activité youtube brancher votre appareil en mode de débogage USB et voir le LogCat lorsque vous cliquez sur l'application Youtube. Il devrait vous donner le nom du paquet alogn avec le nom de l'activité. – Sana

1

Essayez ceci:

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 

    } 
    } 
} 
4

En réponse à la vieille question, juste pour vous informer gars ce paquet ont changé, Heres la mise à jour

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

Cela fonctionne très bien, mais quand vous appelez intention normale avec ACTION_VIEW avec un utilisateur d'URL youtube valide, il obtient le sélecteur d'activité de toute façon.

26

Voilà comment je résolu cette question:

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

Maintenant que je l'ai fait quelques recherches, il semble que je ne devais « vnd.youtube:VIDEO_ID » au lieu de deux barres obliques après les deux points (» : » vs « : // »):

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

J'ai essayé la plupart des suggestions ici et ils ne travaillaient pas vraiment très bien avec tous les soi-disant méthodes « directes » soulevant des exceptions. Je suppose que, avec ma méthode, si l'application YouTube n'est pas installée, le système d'exploitation a une position de repli par défaut autre que le blocage de l'application.En théorie, l'application ne fonctionne que sur les appareils équipés de l'application YouTube. Cela ne devrait donc pas poser problème.

+0

Cela a fonctionné pour moi :) – Warpzit

+0

Bonjour, Est-il possible de lire des vidéos YouTube dans App au lieu de le lire dans Webview? – Scorpion

+0

@Scorpion Il existe une API youtube, avec une telle possibilité. – Matim

18

Utilisez mon code .. Je suis capable de lire la vidéo sur youtube en utilisant ce code ... il vous suffit de fournir id vidéo youtube dans la variable "videoId" ....

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

Cela démarre directement l'application YouTube, en ignorant le menu du sélecteur dans lequel vous pouvez choisir entre chrome et YouTube sur JellyBean. – r1k0

+2

@ r1k0 Oui .... Ce code va démarrer directement l'application Youtube par défaut pour lire la vidéo youtube dans tous les types d'oses android (pas seulement dans JellyBean). –

+1

Si vous avez plus d'une application de lecteur youtube (par exemple Firetube), elle vous incitera à choisir. Juste en disant et en clarifiant. –

5

EDIT: La ci-dessous l'implémentation s'est avérée avoir des problèmes sur au moins certains appareils HTC (ils se sont écrasés). Pour cette raison, je n'utilise pas setclassname et je m'en tiens au menu sélecteur d'action. Je déconseille vivement d'utiliser mon ancienne implémentation.

Suite est l'ancienne implémentation:

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

Où utilitaire est ma propre classe d'utilité personnelle avec Methode suivante:

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

D'abord, je vérifie si YouTube est installé, si elle est installée , Je dis à android quel paquet je préfère ouvrir mon intention.

+0

Qu'est-ce que Utility? Je ne le vois pas comme une importation disponible. –

+0

@IgorG. Merci de l'avoir signalé, mise à jour réponse. – Warpzit

+0

+1 pour l'EDIT. L'utilisation d'un nom de classe explicite est définitivement peu fiable. –

191

Et que diriez-vous:

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

Cela devrait être la réponse votée la plus élevée. –

+3

Des accessoires pour la prise en charge de l'application YouTube, si celle-ci est disponible, et le retour au navigateur Web si nécessaire. Pour ceux qui viennent à cette question, c'est la réponse à utiliser. –

+0

Comment lancer l'application youtube pour la recherche par mot clé par ex. Je veux que l'application youtube soit lancée, puis dans cette recherche de "jobs steve" –

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

La meilleure façon de lire des vidéos sur une autre application est d'abord essayer de résoudre le paquet, autrement dit, vérifiez que l'application est installée sur l'appareil. Donc, si vous voulez lancer une vidéo sur youtube, vous feriez quelque chose comme ceci:

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

Ceci fonctionnera si l'application youtube est installée. Dans le cas contraire, un chooser apparaîtra pour sélectionner une autre application:

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

Cette fonction travail bien pour moi ... il suffit de passer la chaîne url dans la fonction:

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

Vous pouvez utiliser le lecteur Youtube Android API pour lire la vidéo si l'application Youtube est installée, sinon, il suffit de demander à l'utilisateur de choisir parmi les navigateurs Web disponibles.

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