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.
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.
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.
Veți avea nevoie de următoarele biblioteci pentru acest proiect:
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:
În cele din urmă, pentru a adăuga Picasso, copiați-l picasso-2.4.0.jar la libs dosarul proiectului.
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:
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
SearchActivity
SearchActivity
are nevoie de următoarele viziuni:
Editează textul
: pentru a permite utilizatorului să introducă în cuvintele cheie de căutareListView
: pentru a afișa rezultatele căutăriiLinearLayout
: această vizualizare servește ca vizualizare părinte a vederilor menționate mai susCreați un fișier nou numit aspect / activity_search.xml și adăugați următorul cod:
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 videoclipuluiTextView
: pentru a afișa titlul videoclipuluiTextView
: pentru a afișa descrierea videoclipuluiRelativeLayout
: această viziune acționează ca viziunea părintească a celorlalte puncte de vedereCreați un fișier numit aspect / video_item.xml și adăugați următorul cod:
PlayerActivity
PlayerActivity
are nevoie de următoarele viziuni:
YouTubePlayerView
: pentru a reda videoclipuri YouTubeLinearLayout
: 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:
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:
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ă;
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:
YouTube
clasă care va fi utilizată pentru comunicarea cu API-ul YouTubeYouTube.Search.List
pentru a reprezenta o interogare de căutareŞ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;
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 () ArrayAdapteradaptor = 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); );
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");
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.
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.