Crea un client YouTube su Android

Cosa starai creando

Ci sono molti popolari client YouTube di terze parti su Google Play, come Viral Popup e PlayTube, che riescono a offrire alcune funzionalità uniche e aggiuntive che l'app ufficiale di YouTube non offre. Se vuoi creare una app di questo tipo, questo tutorial è per te.

In questo tutorial creiamo il nostro client YouTube che non solo può cercare video su YouTube, ma anche riprodurli. In questo modo, impareremo come utilizzare l'API YouTube Player di YouTube e la libreria client dell'API dei dati di YouTube per Java.

Prerequisiti

Assicurati di avere l'ultima configurazione di bundle ADT Eclipse. Puoi scaricarlo dal sito web degli sviluppatori Android.

Devi anche avere una chiave sviluppatore per utilizzare l'API di YouTube. Segui la procedura sul sito web degli sviluppatori di YouTube di Google per ottenerne uno.

1. Crea un nuovo progetto

Accendi Eclipse e crea una nuova applicazione Android. Dai un nome all'applicazione, SimplePlayer. Scegli un nome di pacchetto univoco e imposta il SDK minimo richiesto a Android 2.2 e il SDK di destinazione a Android 4.X (Anteprima L).

Creeremo il Attività noi stessi così deselezionati Crea attività e fare clic finire.

2. Aggiunta di librerie

Passaggio 1: download di librerie

Avrai bisogno delle seguenti librerie per questo progetto:

  • API Android Player di YouTube: Questa libreria consente alla tua app di incorporare e controllare i video di YouTube in modo trasparente. Al momento della scrittura, l'ultima versione di questa libreria è 1.0.0. Puoi scaricarlo dal sito web di Google Developers.
  • Libreria dei client di YouTube Data API v3 per Java: Questa libreria consente alle informazioni sulla query dell'app su YouTube. Lo useremo per consentire alla nostra app di cercare video su YouTube. Questo è disponibile anche sul sito web di Google Developers.
  • Picasso: Questa libreria semplifica il recupero e la visualizzazione di immagini remote. Lo useremo per scaricare le miniature dei video di YouTube. L'ultima versione è attualmente 2.4.0 e puoi scaricarlo direttamente dal repository Maven.

Passaggio 2: aggiungere le librerie

Per aggiungere l'API di Android Player di YouTube, decomprimi YouTubeAndroidPlayerApi-1.0.0.zip e copia il file YouTubeAndroidPlayerApi.jar al libs cartella del tuo progetto.

Per aggiungere la libreria v3 dell'API dei dati di YouTube e le sue dipendenze, decomprimi google-api-services-youtube-v3-rev124-java-1.19.0.zip e copia i seguenti file su libs cartella del tuo progetto:

  • google-API-servizi-youtube-v3-rev124-1.19.0.jar
  • google-api-client-1.19.0.jar
  • google-OAuth-client-1.19.0.jar
  • google-http-client-1.19.0.jar
  • jsr305-1.3.9.jar
  • google-http-client-jackson2-1.19.0.jar
  • Jackson-core-2.1.3.jar
  • google-api-client-android-1.19.0.jar
  • google-http-client-android-1.19.0.jar

Infine, per aggiungere Picasso, copia picasso-2.4.0.jar al libs cartella del tuo progetto.

3. Modifica il manifest

L'unica autorizzazione della nostra app è android.permission.INTERNET per accedere ai server di YouTube. Aggiungi il seguente a AndroidManifest.xml:

La nostra app ha due attività, una per la ricerca di video e l'altra per riprodurle. Per evitare di dover gestire le modifiche all'orientamento in questo tutorial, forziamo entrambe le attività a utilizzare solo la modalità orizzontale. Dichiarare le attività nel manifest aggiungendo il seguente codice:

      

4. Modifica strings.xml

Il res / valori / strings.xml il file contiene le stringhe utilizzate dalla nostra app. Aggiorna i suoi contenuti come mostrato di seguito:

 SimplePlayer Ricerca Impossibile inizializzare YouTube Player 

5. Crea layout per SearchActivity

Passaggio 1: creare il layout

SearchActivity ha bisogno delle seguenti opinioni:

  • Modifica il testo: per consentire all'utente di digitare le parole chiave di ricerca
  • Visualizzazione elenco: per visualizzare i risultati della ricerca
  • LinearLayout: questa vista funge da vista principale delle viste di cui sopra

Crea un nuovo file chiamato layout / activity_search.xml e aggiungere il seguente codice ad esso:

    

Passaggio 2: Layout risultati ricerca risultati

Ogni risultato di ricerca si riferisce a un video su YouTube e abbiamo bisogno di un layout per visualizzare le informazioni su quel video. Pertanto, ogni elemento del Visualizzazione elenco deve contenere le seguenti viste:

  • ImageView: per visualizzare la miniatura del video
  • TextView: per visualizzare il titolo del video
  • TextView: per visualizzare la descrizione del video
  • RelativeLayout: questa vista funge da vista principale delle altre viste

Crea un file chiamato layout / video_item.xml e aggiungere il seguente codice ad esso:

     

6. Crea il layout per PlayerActivity

Passaggio 1: creare il layout

PlayerActivity ha bisogno delle seguenti opinioni:

  • YouTubePlayerView: per riprodurre video di YouTube
  • LinearLayout: questa vista è la vista principale di YouTubePlayerView

Crea un nuovo file chiamato layout / activity_player.xml e aggiungere il seguente codice ad esso:

   

7. Crea VideoItem

Crea una nuova classe Java chiamata VideoItem.java. Usiamo questa classe per memorizzare le seguenti informazioni su un video di YouTube:

  • ID YouTube
  • titolo
  • descrizione
  • URL miniatura

Tutti i precedenti sono memorizzati come stringhe. Dopo aver aggiunto getter e setter per ognuno di essi, VideoItem.java il file dovrebbe avere il seguente contenuto:

pacchetto com.hathi.simpleplayer; public class VideoItem private String title; descrizione String privata; private String thumbnailURL; ID stringa privato; public String getId () return id;  public void setId (String id) this.id = id;  public String getTitle () return title;  public void setTitle (String title) this.title = title;  public String getDescription () return description;  public void setDescription (descrizione stringa) this.description = description;  public String getThumbnailURL () return thumbnailURL;  public void setThumbnailURL (String thumbnail) this.thumbnailURL = thumbnail; 

8. Creare una classe di supporto

Per evitare di dover gestire l'API dei dati di YouTube direttamente nel nostro Attività, creare una nuova classe Java e nominarla YoutubeConnector.java. Questa classe ha le seguenti variabili membro:

  • un'istanza del Youtube classe che verrà utilizzata per comunicare con l'API di YouTube
  • un'istanza di YouTube.Search.List per rappresentare una query di ricerca
  • la chiave dell'API di YouTube come statica Stringa

Inizializziamo le variabili precedenti nel costruttore. Per inizializzare l'istanza di Youtube, il YouTube.Builder la classe deve essere usata. Le classi che saranno responsabili della connessione di rete e dell'elaborazione JSON vengono passate al builder.

Una volta inizializzato, è ricerca il metodo è usato per creare una richiesta di ricerca. Il elenco il metodo viene quindi utilizzato per menzionare i dettagli che vogliamo nei risultati della ricerca. Per questo tutorial, avremo bisogno di un id e frammento per ogni risultato di ricerca. Da quelli, estraiamo i seguenti campi:

  • id / videoId
  • frammento / titolo
  • frammento / descrizione
  • frammento / miniature / default / url

La chiave API dello sviluppatore deve essere inviata con ogni richiesta di ricerca. Il setKey il metodo è usato per questo scopo. Usiamo anche il setType metodo per limitare i risultati della ricerca a video solo. A questo punto, la classe dovrebbe apparire in questo modo:

pacchetto com.hathi.simpleplayer; classe pubblica YoutubeConnector YouTube privato YouTube; query privata YouTube.Search.List; // La chiave dello sviluppatore va qui public static final String KEY = "AIzaSQZZQWQQMMzik9H_qRxz8g-V6eDL3QW_Us"; pubblico YoutubeConnector (Contesto contesto) youtube = nuovo YouTube.Builder (nuovo NetHttpTransport (), nuovo JacksonFactory (), nuovo HttpRequestInitializer () @Override public void initialize (HttpRequest hr) genera IOException . setApplicationName (content.getString (R.string.app_name)) costruire (.); prova query = youtube.search (). list ("id, snippet"); query.setKey (KEY); query.setType ( "video"); query.setFields ( "oggetti (id / videoId, frammento / titolo, frammento / descrizione, frammento / miniature / default / url)");  catch (IOException e) Log.d ("YC", "Impossibile inizializzare:" + e); 

Successivamente, creiamo un metodo chiamato ricerca per eseguire la ricerca in base alle parole chiave dell'utente. Questo metodo accetta le parole chiave come Stringa parametro. Il domanda variabile di setq il metodo è usato per impostare le parole chiave.

Quindi eseguiamo la query utilizzando il suo eseguire metodo. I risultati vengono restituiti sotto forma di a SearchListResponse esempio. Scolpiamo gli elementi del risultato e ne creiamo uno nuovo Elenco di VideoItem oggetti, che sarà il valore di ritorno di questo metodo. Dopo aver aggiunto la gestione degli errori appropriata, il ricerca il metodo dovrebbe assomigliare a questo:

lista pubblica ricerca (Parole chiavi stringa) query.setQ (parole chiave); prova SearchListResponse response = query.execute (); Elenco results = response.getItems (); Elenco items = new ArrayList(); for (Risultato SearchResult: risultati) Articolo VideoItem = new VideoItem (); item.setTitle (result.getSnippet () getTitle ().); item.setDescription (result.getSnippet () getDescription ().); item.setThumbnailURL (result.getSnippet () getThumbnails () getDefault () getUrl ()...); item.setId (result.getId () getVideoId ().); Items.Add (voce);  restituire articoli;  catch (IOException e) Log.d ("YC", "Impossibile cercare:" + e); return null;  

9. Crea SearchActivity

Crea una nuova classe chiamata SearchActivity.java. Questa classe ha campi che rappresentano le opinioni di cui abbiamo parlato activity_search.xml. Ha anche un handler per fare aggiornamenti sul thread dell'interfaccia utente.

Nel onCreate metodo, inizializziamo le viste e aggiungiamo un OnEditorActionListener al Modifica il testo per sapere quando l'utente ha finito di inserire parole chiave.

classe pubblica SearchActivity estende Activity private EditText searchInput; video ListView privati; gestore dell'handler privato; @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_search); searchInput = (EditText) findViewById (R.id.search_input); videosFound = (ListView) findViewById (R.id.videos_found); handler = new Handler (); searchInput.setOnEditorActionListener (new TextView.OnEditorActionListener () @Override public boolean onEditorAction (TextView v, int actionId, KeyEvent event) if (actionId == EditorInfo.IME_ACTION_DONE) searchOnYoutube (v.getText (). toString ()); return false; return true;);  

Devi aver notato la chiamata al searchOnYoutube metodo. Definiamo ora il metodo. In questo metodo, creiamo un nuovo Filo inizializzare a YoutubeConnector istanza ed eseguila ricerca metodo. È necessario un nuovo thread, poiché le operazioni di rete non possono essere eseguite sul thread dell'interfaccia utente principale. Se ti dimentichi di farlo, dovrai affrontare un'eccezione di runtime. Una volta disponibili i risultati, il gestore è usato per aggiornare l'interfaccia utente.

Elenco privato risultati di ricerca; private void searchOnYoutube (final String words) new Thread () public void run () YoutubeConnector yc = new YoutubeConnector (SearchActivity.this); searchResults = yc.search (keywords); handler.post (new Runnable () public void run () updateVideosFound (););  .inizio(); 

Nel updateVideosFound metodo, generiamo un ArrayAdapter e passalo al Visualizzazione elenco per visualizzare i risultati della ricerca. Nel GetView metodo dell'adattatore, gonfiamo il video_item.xml layout e aggiornare le sue visualizzazioni per visualizzare le informazioni sul risultato della ricerca.

La biblioteca di Picasso caricare metodo viene utilizzato per recuperare la miniatura del video e il in il metodo è usato per passarlo al ImageView.

private void updateVideosFound () ArrayAdapter adattatore = nuovo ArrayAdapter(getApplicationContext (), R.layout.video_item, searchResults) @Override public Visualizza getView (int position, Visualizza convertView, ViewGroup parent) if (convertView == null) convertView = getLayoutInflater (). gonfia (R.layout. video_item, parent, false);  ImageView thumbnail = (ImageView) convertView.findViewById (R.id.video_thumbnail); TextView title = (TextView) convertView.findViewById (R.id.video_title); Descrizione TextView = (TextView) convertView.findViewById (R.id.video_description); VideoItem searchResult = searchResults.get (posizione); . Picasso.with (getApplicationContext ()) Carico (searchResult.getThumbnailURL ()) in (miniature).; title.setText (searchResult.getTitle ()); description.setText (searchResult.getDescription ()); return convertView; ; videosFound.setAdapter (adattatore);  

Infine, abbiamo bisogno di un metodo che imposta il OnItemClickListener del Visualizzazione elenco in modo che l'utente possa fare clic su un risultato di ricerca e guardare il video corrispondente. Diamo un nome a questo metodo addClickListener e chiamalo alla fine del onCreate metodo.

Toccando un elemento nell'elenco, ne creiamo uno nuovo Intento per il PlayerActivity e passare l'ID del video. Una volta il Intento è creato, il startActivity il metodo è usato per lanciare il PlayerActivity.

private void addClickListener () videosFound.setOnItemClickListener (new AdapterView.OnItemClickListener () @Override public void onItemClick (AdapterView av, Visualizza v, int pos, long id) Intent intent = new Intent (getApplicationContext (), PlayerActivity.class); intent.putExtra ("VIDEO_ID", searchResults.get (pos) .getId ()); startActivity (intento); ); 

10. Crea PlayerActivity

Crea una nuova classe Java chiamata PlayerActivity.java che eredita da YouTubeBaseActivity. Questo è importante, perché solo le sottoclassi di YouTubeBaseActivity può fare uso del YouTubePlayerView.

Questa classe ha una variabile membro singolo che rappresenta il YouTubePlayerView abbiamo citato nel activity_player.xml file di layout. Questo è inizializzato nel onCreate metodo invocando il metodo di inizializzazione del YouTubePlayerView classe, passando la chiave API dello sviluppatore.

Successivamente, la nostra classe deve implementare il OnInitializedListener interfaccia per sapere quando l'inizializzazione è completa. L'interfaccia ha due metodi, chiamati onInitializationFailure e onInitializationSuccess.

In caso di successo, il cueVideo il metodo viene utilizzato per visualizzare il video di YouTube. In caso di fallimento, a Crostini viene mostrato che indica all'utente che l'inizializzazione non è riuscita.

Questo è ciò che PlayerActivity classe dovrebbe assomigliare:

la classe pubblica PlayerActivity estende YouTubeBaseActivity implementa OnInitializedListener private YouTubePlayerView playerView; @Override protected void onCreate (Bundle bundle) super.onCreate (bundle); setContentView (R.layout.activity_player); playerView = (YouTubePlayerView) findViewById (R.id.player_view); playerView.initialize (YoutubeConnector.KEY, this);  @Override public void onInitializationFailure (provider provider, risultato YouTubeInitializationResult) Toast.makeText (this, getString (R.string.failed), Toast.LENGTH_LONG) .show ();  @Override public void onInitializationSuccess (Provider provider, player YouTubePlayer, boolean ripristinato) if (! Restored) player.cueVideo (getIntent (). GetStringExtra ("VIDEO_ID"));  

11. Compila ed esegui

Il nostro client YouTube è ora pronto per essere distribuito su un dispositivo Android. Quasi tutti i più diffusi dispositivi Android lo hanno installato, ma assicurati che l'app YouTube sia installata e aggiornata sul dispositivo, poiché la nostra app dipende da esso.

Una volta implementato, dovresti essere in grado di digitare una query per cercare video su YouTube e quindi fare clic su un risultato per avviare la riproduzione del video corrispondente.

Conclusione

Ora sai come incorporare i video di YouTube nella tua app per Android. Hai anche imparato come utilizzare la libreria client dell'API di Google e interagire con YouTube. L'API di Android Player offre molti metodi per controllare la riproduzione dei video e puoi usarli per creare app molto creative. Fare riferimento alla guida di riferimento completa per ulteriori informazioni sull'API.