Creați un client YouTube pe Android

Ce veți crea

Există o mulțime de clienți populari YouTube de la terți, cum ar fi Popup și PlayTube, care reușesc să ofere unele funcții unice și suplimentare pe care aplicația oficială YouTube nu le oferă. Dacă doriți să creați singur o astfel de aplicație, acest tutorial este pentru dvs..

În acest tutorial, creăm propriul nostru client YouTube care nu numai că poate căuta videoclipuri pe YouTube, ci și le poate juca. În acest fel, vom învăța cum să utilizați API-ul YouTube Android Player și biblioteca client pentru API-ul YouTube pentru Java.

Cerințe preliminare

Asigurați-vă că aveți cea mai recentă setare de pachete Eclipse ADT. Puteți să o descărcați de pe site-ul Android Developer.

De asemenea, trebuie să aveți o cheie de dezvoltator pentru a utiliza API-ul YouTube. Urmați pașii de pe site-ul web Google Developer pentru a obține unul.

1. Creați un proiect nou

Activați Eclipse și creați o nouă aplicație Android. Denumiți aplicația, SimplePlayer. Alegeți un nume de pachet unic și setați SDK minim necesar la Android 2.2 si target SDK la Android 4.X (previzualizare L).

Vom crea Activitate noi înșine atât de deselectați Creați activitate și faceți clic pe finalizarea.

2. Adăugarea de biblioteci

Pasul 1: Descărcați Biblioteci

Veți avea nevoie de următoarele biblioteci pentru acest proiect:

  • YouTube API pentru Android Android: Această bibliotecă permite aplicației dvs. să integreze și să controleze videoclipurile YouTube fără probleme. La momentul redactării, este cea mai recentă versiune a acestei biblioteci 1.0.0. Puteți să o descărcați de pe site-ul Google Developers.
  • YouTube Data API v3 Client Library pentru Java: Această bibliotecă permite informațiilor despre interogarea aplicației pe YouTube. O vom folosi pentru a permite aplicației noastre să caute videoclipuri pe YouTube. Acest lucru este disponibil și pe site-ul Google Developers.
  • Picasso: Această bibliotecă facilitează preluarea și afișarea imaginilor la distanță. O vom folosi pentru a aduce miniaturi ale videoclipurilor YouTube. Cea mai recentă versiune este în prezent 2.4.0 și îl puteți descărca direct din depozitul Maven.

Pasul 2: Adăugați biblioteci

Pentru a adăuga API-ul YouTube Android Player, dezarhivați YouTubeAndroidPlayerApi-1.0.0.zip și copiați fișierul YouTubeAndroidPlayerApi.jar la libs dosarul proiectului.

Pentru a adăuga biblioteca YouTube API pentru date v3 și dependențele acesteia, dezarhivați google-api-services-youtube-v3-rev124-java-1.19.0.zip și copiați următoarele fișiere la libs dosarul proiectului:

  • google-api-servicii-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

În cele din urmă, pentru a adăuga Picasso, copiați-l picasso-2.4.0.jar la libs dosarul proiectului.

3. Editați Manifestul

Singura permisiune de care are nevoie aplicația noastră este android.permission.INTERNET pentru a accesa serverele YouTube. Adăugați următoarele la AndroidManifest.xml:

Aplicația noastră are două activități, una pentru a căuta videoclipuri și una pentru a le juca. Pentru a evita nevoia de a face față schimbărilor de orientare în acest tutorial, forțăm ambele activități să utilizeze numai modul peisaj. Declarați activitățile în manifeste prin adăugarea următoarei coduri:

      

4. Editați strings.xml

res / valori / strings.xml fișierul conține șirurile pe care aplicația noastră le utilizează. Actualizați conținutul acestuia după cum urmează:

 SimplePlayer Căutare Eroare la inițializarea playerului Youtube 

5. Creați aspectul pentru SearchActivity

Pasul 1: Creați aspectul

SearchActivity are nevoie de următoarele viziuni:

  • Editează textul: pentru a permite utilizatorului să introducă în cuvintele cheie de căutare
  • ListView: pentru a afișa rezultatele căutării
  • LinearLayout: această vizualizare servește ca vizualizare părinte a vederilor menționate mai sus

Creați un fișier nou numit aspect / activity_search.xml și adăugați următorul cod:

    

Pasul 2: Rezultatele căutării în layout out

Fiecare rezultat al căutării se referă la un videoclip pe YouTube și avem nevoie de un aspect pentru a afișa informații despre acel videoclip. Prin urmare, fiecare articol din ListView trebuie să conțină următoarele vizualizări:

  • ImageView: pentru afișarea miniaturii videoclipului
  • TextView: pentru a afișa titlul videoclipului
  • TextView: pentru a afișa descrierea videoclipului
  • RelativeLayout: această viziune acționează ca viziunea părintească a celorlalte puncte de vedere

Creați un fișier numit aspect / video_item.xml și adăugați următorul cod:

     

6. Creați aspectul pentru PlayerActivity

Pasul 1: Creați aspectul

PlayerActivity are nevoie de următoarele viziuni:

  • YouTubePlayerView: pentru a reda videoclipuri YouTube
  • LinearLayout: această vizualizare este vizualizarea părinte a YouTubePlayerView

Creați un fișier nou numit aspect / activity_player.xml și adăugați următorul cod:

   

7. Creați VideoItem

Creați o nouă clasă Java numită VideoItem.java. Utilizăm această clasă pentru a stoca următoarele informații despre un videoclip YouTube:

  • Codul YouTube
  • titlu
  • Descriere
  • miniatură URL

Toate cele de mai sus sunt stocate ca siruri de caractere. După adăugarea getters și setters pentru fiecare dintre ei, VideoItem.java fișierul trebuie să aibă următorul conținut:

pachet com.hathi.simpleplayer; clasa publică VideoItem titlu privat de șir; descriere privată a șirului; private thumbnailURL; id de identificare privat; public String getId () retur id;  public void setId (id șir) this.id = id;  public String getTitle () return title;  public void setTitle (titlu șir) this.title = title;  public String getDescription () return description;  public void setDescription (Descrierea șirului) this.description = description;  String public getThumbnailURL () return thumbnailURL;  void public setThumbnailURL (miniatură șir) this.thumbnailURL = miniatură; 

8. Crearea unei clase Helper

Pentru a evita să vă confruntați direct cu API-ul YouTube pentru date Activitate, creați o nouă clasă Java și denumiți-o YoutubeConnector.java. Această clasă are următoarele variabile membre:

  • o instanță a YouTube clasă care va fi utilizată pentru comunicarea cu API-ul YouTube
  • un exemplu de YouTube.Search.List pentru a reprezenta o interogare de căutare
  • cheia API YouTube ca statică Şir

Inițializăm variabilele de mai sus în constructor. Pentru a inițializa instanța YouTube, YouTube.Builder clasa trebuie să fie utilizat. Clasele care vor fi responsabile pentru conexiunea la rețea și procesarea JSON vor fi transmise constructorului.

Odată inițializată, căutare metoda este utilizată pentru a crea o solicitare de căutare. listă metoda este apoi utilizată pentru a menționa detaliile pe care le dorim în rezultatele căutării. Pentru acest tutorial, vom avea nevoie de un id și fragment pentru fiecare rezultat al căutării. Dintre acestea, extragem următoarele câmpuri:

  • id / VideoId
  • Fragment / titlu
  • Fragment / descriere
  • Fragment / miniaturi / default / url

Cheia API a dezvoltatorului trebuie trimisă cu fiecare cerere de căutare. setKey este folosită în acest scop. De asemenea, folosim settype metoda de restricționare a rezultatelor căutării Videoclipuri numai. În acest moment, clasa ar trebui să arate astfel:

pachet com.hathi.simpleplayer; clasa publica YoutubeConnector private YouTube youtube; cererea privată YouTube.Search.List; // Cheia dvs. de dezvoltator merge aici public final static String KEY = "AIzaSQZZQWQQWMGziK9H_qRxz8g-V6eDL3QW_Us"; public YoutubeConnector (contextual context) youtube = noul YouTube.Builder (noul NetHttpTransport (), noul JacksonFactory (), noul HttpRequestInitializer () @Override public void initialize (HttpRequest hr) arunca IOException ) setApplicationName (content.getString (R.string.app_name)) construi ().; încercați query = youtube.search (). list ("id, snippet"); query.setKey (KEY); query.setType ( "video"); query.setFields ( "obiecte (id / VideoId, fragment / titlu, fragmentul / descriere, fragment / miniaturi / default / url)");  captură (IOException e) Log.d ("YC", "Nu s-a putut inițializa:" + e); 

Apoi, vom crea o metodă numită căutare pentru a efectua căutarea pe baza cuvintelor cheie ale utilizatorului. Această metodă acceptă cuvintele cheie ca a Şir parametru. întrebare variabile setq metoda este utilizată pentru a seta cuvintele cheie.

Apoi, rulați interogarea folosind a executa metodă. Rezultatele sunt returnate sub forma a SearchListResponse instanță. Repetăm ​​elementele rezultate și creăm un nou Listă de VideoItem obiecte, care vor fi valoarea de retur a acestei metode. După adăugarea unei manipulări adecvate a erorilor, căutare metoda ar trebui să arate astfel:

Lista publică căutare (cuvinte cheie cu șir) query.setQ (cuvinte cheie); încercați SearchListResponse răspuns = query.execute (); Listă results = answer.getItems (); Listă articole = noul ArrayList(); pentru (Rezultatul de căutareResult: rezultate) Articol VideoItem = VideoItem nou (); item.setTitle (result.getSnippet () getTitle ().); item.setDescription (result.getSnippet () getDescription ().); item.setThumbnailURL (result.getSnippet () getThumbnails () getDefault () getUrl ()...); item.setId (result.getId () getVideoId ().); items.add (element);  returneaza lucrurile;  captură (IOException e) Log.d ("YC", "Nu s-a putut căuta:" + e); retur nul;  

9. Creați SearchActivity

Creați o nouă clasă numită SearchActivity.java. Această clasă are câmpuri care reprezintă punctele de vedere la care am menționat activity_search.xml. De asemenea, are a manipulant pentru a face actualizări pe firul de interfață cu utilizatorul.

În onCreate , inițializăm vederile și adăugăm un OnEditorActionListener la Editează textul să știm când utilizatorul a terminat să introducă cuvinte cheie.

clasa publica SearchActivity extinde Activitatea private EditText searchInput; private ListView videosFound; manipulator privat de manipulare; @Override protejate void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_search); căutareInput = (EditText) findViewById (R.id.search_input); videoclipuriFound = (ListView) findViewById (R.id.videos_found); handler = manipulator nou (); searchInput.setOnEditorActionListener new TextView.OnEditorActionListener () @Override public boolean onEditorAction (TextView v, int actionId, eveniment KeyEvent) if (actionId == EditorInfo.IME_ACTION_DONE) searchOnYoutube (v.getText () .toString ()); return false; return true;);  

Trebuie să fi observat apelul către searchOnYoutube metodă. Să definim acum metoda. În această metodă, creăm un nou Fir pentru a inițializa o YoutubeConnector instanță și a alerga căutare metodă. Un fir nou este necesar, deoarece operațiunile de rețea nu pot fi efectuate pe firul principal al interfeței utilizator. Dacă uitați să faceți acest lucru, vă veți confrunta cu o excepție de rulare. Odată ce rezultatele sunt disponibile, manipulant este utilizat pentru a actualiza interfața cu utilizatorul.

Lista privată rezultatele cautarii; private void searchOnYoutube (cuvintele cheie string) new Thread () public void run () YoutubeConnector yc = nou YoutubeConnector (SearchActivity.this); searchResults = yc.search (cuvinte cheie); handler.post (noul Runnable () public void run () updateVideosFound (););  .start(); 

În updateVideosFound metoda, vom genera un ArrayAdapter și trimiteți-l către ListView pentru a afișa rezultatele căutării. În getView metoda adaptorului, umflam video_item.xml și să actualizeze vizualizările pentru a afișa informații despre rezultatul căutării.

Biblioteca Picasso sarcină metoda este folosită pentru a prelua miniaturile video și video în metoda este folosită pentru a trece la ImageView.

privat void updateVideosFound () ArrayAdapter adaptor = nou ArrayAdapter(getApplicationContext (), R.layout.video_item, searchResults) @Override public Vizualizare getView (pozitie int, Vizualizare convertView, ViewGroup părinte) if (convertView == null) convertView = getLayoutInflater () video_item, părinte, fals);  Imagine thumbnail = (ImageView) convertView.findViewById (R.id.video_thumbnail); TextView titlu = (TextView) convertView.findViewById (R.id.video_title); Descrierea TextView = (TextView) convertView.findViewById (R.id.video_description); VideoItem searchResult = căutareResults.get (poziție); . Picasso.with (getApplicationContext ()) încărcare (searchResult.getThumbnailURL ()) în (miniatură). title.setText (searchResult.getTitle ()); description.setText (searchResult.getDescription ()); retur convertView; ; videosFound.setAdapter (adaptor);  

În cele din urmă, avem nevoie de o metodă care să stabilească OnItemClickListener din ListView astfel încât utilizatorul să poată face clic pe un rezultat al căutării și să vizioneze videoclipul corespunzător. Să numim această metodă addClickListener și o numiți la sfârșitul anului onCreate metodă.

Atunci când un element din listă este atins, vom crea un nou scop pentru PlayerActivity și treceți în ID-ul videoclipului. Odata ce scop este creat, startActivity metoda este folosită pentru a lansa PlayerActivity.

private void addClickListener () videosFound.setOnItemClickListener (noul AdapterView.OnItemClickListener () @Override public void onItemClick (AdapterView av, V, int, id lung) Intent intent = Intenție nouă (getApplicationContext (), PlayerActivity.class); intent.putExtra ("VIDEO_ID", căutareResults.get (pos) .getId ()); startActivity (intenție); ); 

10. Creați PlayerActivity

Creați o nouă clasă Java numită PlayerActivity.java care mostenesc de la YouTubeBaseActivity. Acest lucru este important, deoarece doar subclasele din YouTubeBaseActivity pot folosi YouTubePlayerView.

Această clasă are o singură variabilă element care reprezintă YouTubePlayerView am menționat în activity_player.xml layout file. Aceasta este inițializată în onCreate metoda prin invocarea metodei de inițializare a metodei YouTubePlayerView clasă, trecând în cheia API a dezvoltatorului.

Apoi, clasa noastră trebuie să pună în aplicare OnInitializedListener pentru a afla când procesul de inițializare este complet. Interfața are două metode numite onInitializationFailure și onInitializationSuccess.

În caz de succes, cueVideo metoda este utilizată pentru afișarea videoclipului YouTube. În caz de eșec, a Paine prajita este afișat faptul că îi spune utilizatorului că inițializarea a eșuat.

Aceasta este ceea ce PlayerActivity clasa ar trebui să arate ca:

clasa publică PlayerActivity se extinde YouTubeBaseActivity implementează OnInitializedListener private YouTubePlayerView playerView; @Override protejat void onCreate (pachet Bundle) super.onCreate (pachet); setContentView (R.layout.activity_player); playerView = (YouTubePlayerView) findViewById (R.id.player_view); playerView.initialize (YoutubeConnector.KEY, aceasta);  @Override public void onInitializationFailure (Furnizor furnizor, rezultat YouTubeInitializationResult) Toast.makeText (aceasta, getString (R.string.failed), Toast.LENGTH_LONG) .show ();  @Override public void onInitializationSuccess (furnizor de servicii, player YouTubePlayer, boolean restaurat) if (! Restored) player.cueVideo (getIntent () getStringExtra ("VIDEO_ID");  

11. Compilați și executați

Clientul nostru YouTube este acum gata să fie instalat pe un dispozitiv Android. Aproape toate dispozitivele populare Android au instalat, dar asigurați-vă că aplicația YouTube este instalată și actualizată pe dispozitiv, deoarece aplicația noastră depinde de aceasta.

Odată implementat, ar trebui să puteți introduce o interogare pentru a căuta videoclipuri pe YouTube și apoi să faceți clic pe un rezultat pentru a începe redarea videoclipului corespunzător.

Concluzie

Acum știți cum să încorporați videoclipuri YouTube în aplicația Android. De asemenea, ați învățat cum să utilizați biblioteca de clienți API Google și să interacționați cu YouTube. API-ul Android Player oferă o mulțime de metode pentru a controla redarea videoclipurilor și le puteți folosi pentru a găsi aplicații foarte creative. Consultați ghidul de referință complet pentru a afla mai multe despre API.

Cod