App YouTube per Android Riproduci Video Intent


148

Ho creato un'app in cui è possibile scaricare video di YouTube per Android. Ora lo voglio in modo che se riproduci un video nell'app nativa di YouTube puoi scaricarlo anche. Per fare questo, devo conoscere l'intento che l'app nativa di YouTube mette in campo per poter giocare all'app di YouTube.
Potrei farlo facilmente se avessi il programma YouTube sul mio emulatore, quindi la mia prima domanda è:
1. Posso scaricare l'app YouTube per il mio emulatore, o ...
2. Qual è l'intento usato quando l'utente seleziona un video per la riproduzione.


ehi, sto anche provando a creare un'app per scaricare video da YouTube. Quindi, voglio sapere che devo ottenere qualsiasi chiave API per questo o semplicemente posso usare la visualizzazione Web nella mia app ?? @ASP
Jaydip Kalkani,

Risposte:


263

E che dire di questo:

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

Nota: fai attenzione quando usi questo metodo, YouTube potrebbe sospendere il tuo canale a causa dello spam, questo è successo due volte con me


5
Supporti per supportare l'app di YouTube se è disponibile e, se necessario, ricorrere al browser web. Per chi arriva a questa domanda, questa è la risposta da usare.
Luke Sapan,

Come avviare l'app di YouTube per la ricerca tramite parole chiave, ad es. voglio che l'app di YouTube sia lanciata e poi in quella ricerca di "steve jobs"
Rusheel Jain

@RusheelJain sarebbe un nuovo problema. Quello che farei è cercare "testo di ricerca delle intenzioni di Android YouTube" o qualcosa del genere.
voghDev

2
IMHO questa dovrebbe essere la risposta accettata. Molte grazie!
Nacho L.,

1
Questa è la risposta, ma forse dovresti rimuovere la statica nella dichiarazione di funzione
Ampersanda,

176

Funzionerà su un dispositivo ma non sull'emulatore secondo la risposta di Lemmy .

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

Questo è stato il vincitore per me, se hai installato l'app di YouTube ti chiede se vuoi usarlo invece.
Tristan Warner-Smith,

usa questo codice ottengo il selettore di intenti per YouTube e il browser. come nasconderlo? ho solo bisogno di collegarmi direttamente a YouTube Player.
Praveen,

@Praveen Chandrasekaran l'app di YouTube potrebbe non essere disponibile: è meglio utilizzare l'intento e lasciare che il sistema risolva le app installate che supportano la richiesta.
cofiem,

3
Dovrai chiamare setClassName sull'intento prima di chiamare startActivity, in questo modo: intent.videoClient.setClassName ("com.google.android.youtube", "com.google.android.youtube.PlayerActivity"); Vedi la risposta di Sana per un esempio di codice funzionante.
Simmetrico

Questo non funziona per me, su un dispositivo reale con l'app di YouTube installata. Apre ancora il browser web. L'approccio di Bibbity di seguito funziona però. O forse il commento di Symmetric, non l'ho provato.
Mathias Conradt,

33

Ecco come ho risolto questo problema:

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

Ora che ho fatto qualche ricerca in più, sembra che avessi bisogno solo di "vnd.youtube:VIDEO_ID" invece di due barre dopo i due punti (':' vs. ': //'):

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

Ho provato la maggior parte dei suggerimenti qui e non hanno funzionato molto bene con tutti i presunti metodi "diretti" sollevando eccezioni. Suppongo che, con il mio metodo, se l'app YouTube NON è installata, il sistema operativo ha una posizione di fallback predefinita rispetto a un arresto anomalo dell'app. L'app in teoria funziona solo su dispositivi con l'app YouTube su di essi, quindi questo non dovrebbe essere un problema.


Ciao, è possibile riprodurre video di YouTube in App invece di riprodurli in Webview?
Scorpion

@Scorpion Esiste l'API di YouTube, con tale possibilità.
Matthewek,

1
Funziona benissimo! Ma ti manca una parentesi giusta sulla prima riga.
KostasC,

18

Usa il mio codice .. Sono in grado di riprodurre video di YouTube utilizzando questo codice ... devi solo fornire l'ID del video di YouTube nella variabile "videoId" ....

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

3
Questo avvia direttamente l'applicazione YouTube, ignorando il menu di selezione in cui è possibile scegliere tra Chrome e YouTube su JellyBean.
r1k0,

2
@ r1k0 Sì .... Questo codice avvierà direttamente l'app YouTube predefinita per riprodurre il video di YouTube in tutti i tipi di ose Android (non solo in JellyBean).
Soubhab Pathak,

1
Se hai più di un'app per giocatore di YouTube (ad esempio Firetube) ti farà comunque scegliere. Sto solo dicendo e chiarendo.
jj_

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

Dove si videoIdtrova l'ID video del video di YouTube che deve essere riprodotto. Questo codice funziona perfettamente su Motorola Milestone .

Ma fondamentalmente ciò che possiamo fare è verificare quale attività viene caricata quando avvii l'app Youtube e sostituisci di conseguenza il nome pacchetto e il nome classe.


Ricevo il seguente errore. 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? Si prega di risolvere questo.
Vinothkumar Arputharaj,

Qual è il tuo dispositivo? Questo nome di attività è specifico solo per un Motorola Milestone, ma se si desidera vedere il nome dell'attività per il plug-in di attività di YouTube nel dispositivo in modalità di debug USB e vedere LogCat quando si fa clic sull'app Youtube. Dovrebbe darti il ​​nome del pacchetto alogn con il nome dell'attività.
Sana,

7

Si suppone che YouTube (e l'applicazione Market) vengano utilizzati solo con ROM speciali, che Google ha rilasciato per G1 e G2. Quindi non è possibile eseguirli in una ROM OpenSource, come quella usata nell'emulatore, sfortunatamente. Bene, forse puoi, ma non in modo ufficialmente supportato.


Conosci il modo non supportato?
Isaac Waller,

Scusa no. Non volevo escludere la possibilità.
Lemmy

6

EDIT: L'implementazione di seguito ha dimostrato di avere problemi su almeno alcuni dispositivi HTC (si sono arrestati in modo anomalo). Per questo motivo non uso setclassname e non mi attengo al menu di scelta dell'azione. Sconsiglio vivamente di utilizzare la mia vecchia implementazione.

Di seguito è riportata la vecchia implementazione:

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

Dove Utility è la mia classe di utility personale con il seguente metodo:

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

Per prima cosa controllo se YouTube è installato, se è installato, dico ad Android quale pacchetto preferisco aprire il mio intento.


Che cos'è l'utilità? Non lo vedo come un'importazione disponibile.
IgorGanapolsky

+1 per EDIT. L'uso di un nome di classe esplicito è sicuramente inaffidabile.
Giulio Piancastelli,

5

Trovato:

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

Eccezionale! Quindi hai appena creato un ricevitore broadcast per questo?
Dan,

4

Rispondendo alla vecchia domanda, solo per informarvi che il pacchetto è cambiato, ecco l'aggiornamento

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

Funziona molto bene, ma quando chiami Intento normale con ACTION_VIEW con un URL di YouTube valido l'utente ottiene comunque il selettore Attività.


3

Il modo più sicuro per eseguire video su un'app diversa è innanzitutto provare a risolvere il pacchetto, in altre parole, verificare che l'app sia installata sul dispositivo. Quindi, se vuoi eseguire un video su YouTube, dovresti fare qualcosa del genere:

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

Puoi anche semplicemente prendere il 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;
}

Ha funzionato bene nella mia app.


Ricorda che sempre - Google non consente mai la riproduzione di video di YouTube in Webview. Perché forniscono l'API di Youtube per riprodurre video di Youtube sull'app Android. Se riproducerai video di Youtube all'interno della visualizzazione Web, Google rimuoverà la tua applicazione dal Playstore.
santosh devnath,

1

Prova questo:

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

Funzionerà se l'app di YouTube è installata. In caso contrario, verrà visualizzato un selettore per selezionare un'altra applicazione:

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

Prova questo,

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

Anche questo non ha funzionato per me. C'è qualche requisito di flash player nell'emulatore.
L'iCoder

0

Questa funzione funziona bene per me ... basta passare la stringa url nella funzione:

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

È possibile utilizzare l'API del lettore Android di Youtube per riprodurre il video se l'app YouTube è installata, altrimenti è sufficiente chiedere all'utente di scegliere tra i browser Web disponibili.

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);
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.