Aplicación Android de YouTube Reproducir video intencionado

Creé una aplicación donde puedes descargar videos de YouTube para Android. Ahora, lo quiero para que, si reproduces un video en la aplicación nativa de YouTube, también puedas descargarlo. Para hacer esto, necesito saber el propósito que tiene la aplicación nativa de YouTube para reproducir la aplicación de YouTube.
Podría hacer esto fácilmente si tuviera el progtwig de YouTube en mi emulador, así que mi primera pregunta es:
1. ¿Puedo descargar la aplicación de YouTube para mi emulador, o …
2. ¿Cuál es la intención utilizada cuando el usuario selecciona un video para la reproducción.

    Y que tal esto:

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

    Esto funcionará en un dispositivo pero no en el emulador según la respuesta de Lemmy .

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

    Así es como resolví este problema:

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

    Ahora que hice más investigación, parece que solo necesitaba ‘vnd.youtube: VIDEO_ID’ en lugar de dos barras después de los dos puntos (‘:’ vs. ‘: //’):

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

    Probé la mayoría de las sugerencias aquí y realmente no funcionaron muy bien con todos los supuestos métodos “directos” que plantean excepciones. Asumiría que, con mi método, si la aplicación de YouTube NO está instalada, el sistema operativo tiene una posición de respaldo predeterminada de algo más que bloquear la aplicación. La aplicación teóricamente solo funciona en dispositivos con la aplicación de YouTube en ellos de todos modos, por lo que esto no debería ser un problema.

    Use mi código. Puedo reproducir video de youtube usando este código … solo necesita proporcionar la identificación de video de YouTube en 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); 
      Intent videoClient = new Intent(Intent.ACTION_VIEW); videoClient.setData(Uri.parse("http://m.youtube.com/watch?v="+videoId)); startActivityForResult(videoClient, 1234); 

    donde videoID es la identificación de video del video de youtube que debe reproducirse. Este código funciona bien en Motorola Milestone.

    Pero básicamente lo que podemos hacer es verificar qué actividad se carga cuando inicias la aplicación de Youtube y, en consecuencia, sustituir el nombre del paquete y el nombre de clase.

    Se supone que la aplicación de Youtube (y Market) solo se debe usar con ROM especiales, que Google lanzó para G1 y G2. Por lo tanto, no puede ejecutarlos en una ROM OpenSource, como la que se usa en el Emulador, desafortunadamente. Bueno, tal vez puedas, pero no de una manera oficialmente compatible.

    Lo encontré:

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

    EDITAR: La implementación a continuación demostró tener problemas en al menos algunos dispositivos HTC (se bloquearon). Por esa razón, no uso setclassname y me apego al menú del selector de acciones. Desaconsejo fuertemente usar mi implementación anterior.

    Lo siguiente es la implementación anterior:

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

    Donde la utilidad es mi propia clase de utilidad personal con el siguiente método:

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

    Primero compruebo si youtube está instalado, si está instalado, le digo a android qué paquete prefiero para abrir mi bash.

    Respondiendo a una vieja pregunta, solo para informarles que el paquete ha cambiado, aquí está la actualización

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

    Esto funciona muy bien, pero cuando llamas a Intent normal con ACTION_VIEW con un URL válido, el usuario de URL obtiene el selector de actividad de todos modos.

    Youtube ahora tiene una api de jugador, deberías probar eso.

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

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

    La forma más segura de ejecutar videos en una aplicación diferente es primero tratando de resolver el paquete, en otras palabras, verifique que la aplicación esté instalada en el dispositivo. Entonces, si quieres ejecutar un video en youtube harías algo como esto:

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

    También puede simplemente agarrar el 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; } 

    Funcionó bien en mi aplicación.

    Prueba esto:

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

    Prueba esto,

      WebView webview = new WebView(this); String htmlString = "     "; webview.loadData(htmlString ,"text/html", "UTF-8"); 

    Esto funcionará si la aplicación de youtube está instalada. Si no, aparecerá un selector para seleccionar otra aplicación:

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

    Esta función funciona bien para mí … simplemente pase la cadena url en la función:

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

    Puede usar la API de reproductor de Android de Youtube para reproducir el video si está instalada la aplicación de YouTube, de lo contrario, solicite al usuario que elija entre los navegadores 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); }