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.
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.
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.
Avrai bisogno delle seguenti librerie per questo progetto:
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:
Infine, per aggiungere Picasso, copia picasso-2.4.0.jar al libs cartella del tuo progetto.
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:
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
SearchActivity
SearchActivity
ha bisogno delle seguenti opinioni:
Modifica il testo
: per consentire all'utente di digitare le parole chiave di ricercaVisualizzazione elenco
: per visualizzare i risultati della ricercaLinearLayout
: questa vista funge da vista principale delle viste di cui sopraCrea un nuovo file chiamato layout / activity_search.xml e aggiungere il seguente codice ad esso:
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 videoTextView
: per visualizzare il titolo del videoTextView
: per visualizzare la descrizione del videoRelativeLayout
: questa vista funge da vista principale delle altre visteCrea un file chiamato layout / video_item.xml e aggiungere il seguente codice ad esso:
PlayerActivity
PlayerActivity
ha bisogno delle seguenti opinioni:
YouTubePlayerView
: per riprodurre video di YouTubeLinearLayout
: questa vista è la vista principale di YouTubePlayerView
Crea un nuovo file chiamato layout / activity_player.xml e aggiungere il seguente codice ad esso:
VideoItem
Crea una nuova classe Java chiamata VideoItem.java. Usiamo questa classe per memorizzare le seguenti informazioni su un video di YouTube:
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;
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:
Youtube
classe che verrà utilizzata per comunicare con l'API di YouTubeYouTube.Search.List
per rappresentare una query di ricercaStringa
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 pubblicaricerca (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;
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 privatorisultati 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 () ArrayAdapteradattatore = 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); );
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"));
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.
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.