App YouTube per Android Riproduci video Intent


113

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 tu. Per fare questo, ho bisogno di conoscere l'Intento che l'app nativa di YouTube mette fuori per riprodurre l'app di YouTube.
avrei potuto fare questo easially se avessi il programma YouTube sul mio emulatore, quindi la mia prima domanda è:
1. Posso scaricare l'applicazione YouTube per il mio emulatore, o ...
2. Qual è l'intento utilizzato quando l'utente seleziona un video per la riproduzione.

  0

Questo potrebbe aiutare anche http://www.gadgetsaint.com/android/play-youtube-android-youtube-player-api/ 10 apr. 172017-04-10 05:31:31

7

YouTube (e l'applicazione Market) si suppone solo per essere utilizzato con le ROM speciali, che Google ha rilasciato per il G1 e G2. Quindi non è possibile eseguirli in una OpenSource-ROM, come quella usata nell'Emulatore, sfortunatamente. Beh, forse puoi, ma non in modo ufficialmente supportato.

  0

Non si conosce il modo in cui non supportato? 01 mar. 092009-03-01 07:03:45

  0

Siamo spiacenti, no. Solo non volevo escludere la possibilità. 01 mar. 092009-03-01 16:12:15


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

Fantastico! Quindi hai appena creato un ricevitore broadcast per questo? 26 set. 172017-09-26 15:04:25


162

questo funzionerà su un dispositivo ma non l'emulatore per Lemmy's answer.

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

Questo è stato il vincitore per me, se hai installato l'app youtube ti chiede se vuoi usarlo. 23 mar. 102010-03-23 16:37:52

  0

uso questo codice ottengo il chooser di intento per youtube e browser. come nasconderlo? ho solo bisogno di collegarmi direttamente al giocatore di YouTube. 21 mag. 102010-05-21 14:13:08

  0

@Praveen Chandrasekaran l'app YouTube potrebbe non essere disponibile - è meglio usare l'Intento e lasciare che il sistema elabori quali app installate supportano la richiesta. 23 set. 102010-09-23 12:27:53

+3

Avrai bisogno di chiamare setClassName sull'Intent prima di chiamare startActivity, in questo modo: intent.videoClient.setClassName ("com.google.android.youtube", "com.google.android.youtube.PlayerActivity"); Vedere la risposta di Sana per un esempio di codice funzionante. 28 gen. 112011-01-28 15:50:02

  0

Questo non funziona per me, su un dispositivo reale con l'app youtube installata. Apre comunque il browser web. L'approccio di Bibbity qui sotto funziona comunque. O forse il commento di Symmetric, non l'ho provato. 11 nov. 112011-11-11 08:10:14

  0

+1 simpatico .. e come impostare il player di YouTube come lettore predefinito ... 09 feb. 122012-02-09 10:01:49

  0

Questo non funziona per me su un dispositivo reale. Dice semplicemente che non può riprodurre il video. Ho installato YouTube. 18 mar. 122012-03-18 23:05:30

  0

durante l'utilizzo di questo codice sono in grado di riprodurre video, ma dopo aver scelto il mio browser il caricamento della pagina web di youtube e ho bisogno di fare clic, c'è un modo per evitare questo passo 25 lug. 132013-07-25 09:02:27

  0

mhhh. uguale uguale ma diverso. tranne che hai un solo rivestimento;) ma funziona anche questo. 10 giu. 142014-06-10 14:49:37

  0

http://stackoverflow.com/a/12439378/578309 è più lungo ma più sicuro, questa soluzione è più breve ma potrebbe non funzionare su alcuni dispositivi. 10 feb. 172017-02-10 11:33:33

  0

Puoi anche provare anche l'API di YouTube Player http://www.gadgetsaint.com/android/play-youtube-android-youtube-player-api/ 07 apr. 172017-04-07 13:40:39


1

È anche possibile afferrare 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.


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

Questo non funziona per me. 16 nov. 102010-11-16 23:49:34

  0

Anche questo non ha funzionato per me. C'è qualche richiesta di flash player in emulatore. 16 nov. 112011-11-16 06:15:11


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

dove videoId è il video id del video di YouTube che deve essere giocato. Questo codice funziona perfettamente su Motorola Milestone.

Ma in fondo ciò che possiamo fare è quello di verificare la presenza di ciò che l'attività viene caricato quando si avvia l'applicazione Youtube e di conseguenza sostituire la packageName e className.

  0

Ho ricevuto il seguente errore. 'ERROR/AndroidRuntime (1519): Causato da: android.content.ActivityNotFoundException: Impossibile trovare la classe di attività esplicite {com.google.android.youtube/com.google.android.youtube.PlayerActivity}; hai dichiarato questa attività nel tuo AndroidManifest.xml? ' Si prega di risolvere questo. 14 giu. 112011-06-14 14:06:37

  0

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


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 

    } 
    } 
} 

4

Rispondendo ad vecchia questione, proprio per informare voi ragazzi quel pacchetto sono cambiati, 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); 

Questo funziona molto bene, ma quando si chiama Intent normale con ACTION_VIEW con l'utente di un URL di youtube valido ottiene comunque il selettore di attività.


26

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, sembra che Ho solo bisogno '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 funzionava molto bene con tutti i metodi di presunti 'diretti' che sollevano eccezioni. Suppongo che, con il mio metodo, se l'app YouTube NON è installata, il sistema operativo ha una posizione di fallback predefinita di qualcosa di diverso dall'arresto anomalo dell'app.In teoria, l'app funziona solo su dispositivi con l'app YouTube, quindi questo dovrebbe essere un problema.

  0

Questo ha funzionato per me :) 01 nov. 112011-11-01 13:35:39

  0

Ciao, è possibile riprodurre i video di YouTube in App anziché riprodurli in Webview? 08 ott. 122012-10-08 06:07:31

  0

@Scorpion C'è l'API di youtube, con tale possibilità. 31 mag. 132013-05-31 19:13:53

  0

Funziona benissimo! Ma ti manca una parentesi sulla prima riga. 17 gen. 162016-01-17 13:58:43


18

utilizzare il mio codice .. Sono in grado di riprodurre video di YouTube utilizzando questo codice ... non vi resta che fornire YouTube Video id 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 scelta in cui è possibile scegliere tra Chrome e YouTube su JellyBean. 29 ago. 122012-08-29 08:16:57

+2

@ r1k0 Sì .... Questo codice avvia direttamente l'app YouTube predefinita per riprodurre il video di YouTube in tutti i tipi di ose Android (non solo in JellyBean). 29 ago. 122012-08-29 14:00:50

+1

Se hai più di una app per giocatore di YouTube (ad esempio Firetube) ti farà comunque scegliere. Sto solo dicendo e mettendo in chiaro. 12 apr. 162016-04-12 03:56:23


5

EDIT: Il di seguito l'implementazione ha dimostrato di avere problemi su almeno alcuni dispositivi HTC (si sono bloccati). Per questo motivo, non uso setclassname e non attingo con il menu selettore azioni. Sconsiglio vivamente di usare la mia vecchia implementazione.

Segue 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 l'utilità è la mia classe di utilità personale con seguente methode:

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

prima verifico se è installato youtube, se è installato , Dico ad Android quale pacchetto preferisco aprire il mio intento.

  0

Che cos'è l'utilità? Non lo vedo come importazione disponibile. 03 apr. 122012-04-03 03:49:54

  0

@IgorG. Grazie per avermelo fatto notare, risposta aggiornata. 03 apr. 122012-04-03 07:42:57

  0

+1 per la modifica. Usare un nome di classe esplicito è sicuramente inaffidabile. 21 giu. 122012-06-21 08:46:51


191

E che ne dite 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); 
    } 
} 
+2

Questa dovrebbe essere la risposta più votata. 10 giu. 142014-06-10 18:03:27

+3

Puntelli per il supporto dell'app YouTube se è disponibile e se necessario tornare al browser web. Per chi viene a questa domanda, questa è la risposta da usare. 30 mag. 152015-05-30 22:04:05

  0

Come avviare l'app YouTube per la ricerca tramite la parola chiave es. voglio che l'app di youtube sia lanciata e quindi nella ricerca di "steve jobs" 13 set. 152015-09-13 09:20:42

  0

@RusheelJain sarebbe un nuovo problema. Quello che farei è cercare "android youtube intent search text" o qualcosa del genere. 01 ott. 152015-10-01 09:23:02

+1

IMHO questa dovrebbe essere la risposta accettata. Molte grazie! 21 nov. 152015-11-21 14:31:07

  0

Perché questa non è la risposta accettata? 23 lug. 162016-07-23 23:26:58

  0

'Intent appIntent = new Intent (Intent.ACTION_VIEW, Uri.parse (" vnd.youtube: "+ id)); 'In questa riga la rimozione di' vnd.youtube' ha funzionato per me, poiché aggiungeva l'URL extra di youtube.com all'URL 'id'. 13 ott. 162016-10-13 13:17:26

+1

Questa è la risposta, ma forse dovresti rimuovere la statica nella dichiarazione di funzione 20 mag. 172017-05-20 12:51:42

  0

questo è ciò di cui avevo bisogno! 25 set. 172017-09-25 10:44:16


2

Youtube ha ora un giocatore di api, si dovrebbe provare questo.

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


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

Il modo più sicuro per eseguire i video su un'altra app è in primo luogo cercare di risolvere il pacchetto, in altre parole, verificare che l'applicazione è installata sul dispositivo. Quindi se vuoi eseguire un video su youtube devi 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); 
} 

0

Questo funzionerà se l'app di youtube è installata. In caso contrario, un selettore mostra fino a selezionare altre applicazioni:

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

Questa funzione bel lavoro per me ... basta passare 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 il lettore Youtube Android API per riprodurre il video se è installata l'app YouTube, altrimenti basta 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); 
       }