Opprett en YouTube-klient på Android

Hva du skal skape

Det er mange populære tredjeparts YouTube-klienter på Google Play, for eksempel Viral Popup og PlayTube, som klarer å tilby noen unike og tilleggsfunksjoner som den offisielle YouTube-appen ikke gjør. Hvis du vil bygge en slik app selv, er denne opplæringen for deg.

I denne opplæringen lager vi vår egen YouTube-klient som ikke bare kan søke etter videoer på YouTube, men også spille dem. Når du gjør det, lærer vi hvordan du bruker YouTube-spilleren til YouTube og klientbiblioteket for YouTube Data API for Java.

Forutsetninger

Sørg for at du har den nyeste Eclipse ADT Bundle satt opp. Du kan laste den ned på Android Developer-nettstedet.

Du må også ha en utvikler nøkkel for å bruke YouTube API. Følg trinnene på Googles YouTube Developer-nettsted for å få en.

1. Lag et nytt prosjekt

Brann opp Eclipse og opprett et nytt Android-program. Navn søknaden, SimplePlayer. Velg et unikt pakke navn, og sett inn minimumskrav SDK til Android 2.2 og mål SDK til Android 4.X (L Preview).

Vi skal lage Aktivitet oss så avvelg Opprett aktivitet og klikk Bli ferdig.

2. Legge til biblioteker

Trinn 1: Last ned biblioteker

Du trenger følgende biblioteker for dette prosjektet:

  • YouTube Android Player API: Dette biblioteket lar appen din legge inn og kontrollere YouTube-videoer sømløst. På tidspunktet for skriving er den nyeste versjonen av dette biblioteket 1.0.0. Du kan laste den ned fra Google Developers nettsted.
  • YouTube Data API v3-klientbibliotek for Java: Dette biblioteket lar appen din søke på YouTube. Vi skal bruke den til å aktivere appen vår for å søke etter videoer på YouTube. Dette er også tilgjengelig på nettstedet til Google Developers.
  • Picasso: Dette biblioteket gjør det enkelt å hente og vise eksterne bilder. Vi skal bruke den til å hente miniatyrbilder av YouTube-videoer. Den nyeste versjonen er for øyeblikket 2.4.0 og du kan laste den ned direkte fra Maven-depotet.

Trinn 2: Legg til biblioteker

For å legge til YouTube Android Player API, unzip YouTubeAndroidPlayerApi-1.0.0.zip og kopier filen YouTubeAndroidPlayerApi.jar til libs mappe av prosjektet ditt.

For å legge til YouTube Data API v3-biblioteket og dets avhengigheter, unzip google-api-services-youtube-v3-rev124-java-1.19.0.zip og kopier følgende filer til libs mappe av prosjektet ditt:

  • google-API-services-youtube-v3-rev124-1.19.0.jar
  • google-api-klient-1.19.0.jar
  • google-OAuth-klient-1.19.0.jar
  • google-http-klient-1.19.0.jar
  • jsr305-1.3.9.jar
  • google-http-klient-jackson2-1.19.0.jar
  • Jackson-kjerne-2.1.3.jar
  • google-api-klient-android-1.19.0.jar
  • google-http-klient-android-1.19.0.jar

Til slutt, for å legge til Picasso, kopier picasso-2.4.0.jar til libs mappe av prosjektet ditt.

3. Rediger manifestet

Den eneste tillatelsen vår app trenger er android.permission.INTERNET for å få tilgang til YouTubes servere. Legg til følgende til AndroidManifest.xml:

Vår app har to aktiviteter, en for å søke etter videoer og en for å spille dem. For å unngå å måtte håndtere orienteringsendringer i denne opplæringen, tvinger vi begge aktivitetene til å bare bruke liggende modus. Erklære aktivitetene i manifestet ved å legge til følgende kode for det:

      

4. Rediger strings.xml

De res / verdier / strings.xml filen inneholder strenger som vår app bruker. Oppdater innholdet som vist nedenfor:

 SimplePlayer Søke Kunne ikke initialisere Youtube Player 

5. Lag oppsett for SearchActivity

Trinn 1: Opprett layout

SearchActivity trenger følgende synspunkter:

  • EditText: å la brukeren skrive inn søkeordene
  • Listevisning: for å vise søkeresultatene
  • LinearLayout: Denne visningen fungerer som overordnet visning av de nevnte visninger

Opprett en ny fil som heter oppsett / activity_search.xml og legg til følgende kode for det:

    

Trinn 2: Oppsett av søkeresultater

Hvert søkeresultat refererer til en video på YouTube, og vi trenger et oppsett for å vise informasjon om videoen. Derfor er hvert element av Listevisning må inneholde følgende visninger:

  • Imageview: for å vise miniatyrbildet for videoen
  • TextView: å vise tittelen på videoen
  • TextView: for å vise beskrivelsen av videoen
  • RelativeLayout: Denne visningen fungerer som overordnet visning av de andre visningene

Opprett en fil som heter oppsett / video_item.xml og legg til følgende kode for det:

     

6. Lag oppsett for PlayerActivity

Trinn 1: Opprett layout

PlayerActivity trenger følgende synspunkter:

  • YouTubePlayerView: å spille YouTube-videoer
  • LinearLayout: denne visningen er overordnet visning av YouTubePlayerView

Opprett en ny fil som heter oppsett / activity_player.xml og legg til følgende kode for det:

   

7. Lag VideoItem

Opprett en ny Java-klasse som heter VideoItem.java. Vi bruker denne klassen til å lagre følgende informasjon om en YouTube-video:

  • YouTube-ID
  • tittel
  • beskrivelse
  • miniatyradresse

Alt ovenfor er lagret som strenger. Etter å legge til getters og setters for hver av dem, VideoItem.java filen skal ha følgende innhold:

pakke com.hathi.simpleplayer; offentlig klasse VideoItem private String title; privat streng beskrivelse; Private String thumbnailURL; privat streng ID; offentlig String getId () retur id;  offentlig tomgang setId (String id) this.id = id;  offentlig String getTitle () retur tittel;  Offentlig tomgang setTitle (Stringtittel) this.title = title;  Offentlig String getDescription () return description;  Offentlig tomt settDescription (String beskrivelse) this.description = description;  Offentlig String getThumbnailURL () return thumbnailURL;  offentlig tomgangssettThumbnailURL (streng miniatyr) this.thumbnailURL = miniatyrbilde; 

8. Lag en hjelpeklasse

For å unngå å måtte håndtere YouTube Data API direkte i vår Aktivitet, opprett en ny Java-klasse og gi den navnet YoutubeConnector.java. Denne klassen har følgende medlemsvariabler:

  • en forekomst av YouTube klassen som vil bli brukt til å kommunisere med YouTube API
  • en forekomst av YouTube.Search.List å representere et søk
  • YouTube API-nøkkelen som en statisk string

Vi initialiserer ovennevnte variabler i konstruktøren. For å initialisere forekomsten av YouTube, de YouTube.Builder klassen må brukes. Klassene som vil være ansvarlige for nettverksforbindelsen og JSON-prosesseringen, sendes til byggeren.

En gang initialisert, dens Søke Metoden brukes til å opprette en søknadsforespørsel. De liste Metoden brukes da til å nevne detaljene vi ønsker i søkeresultatene. For denne opplæringen skal vi trenge en id og tekstutdrag for hvert søkeresultat. Fra disse, trekker vi ut følgende felt:

  • id / VIDEOID
  • kodebit / tittel
  • tekstutdrag / beskrivelse
  • tekstutdrag / thumbnails / default / url

Utviklerens API-nøkkel må sendes med hver søknadsforespørsel. De setKey Metoden brukes til dette formålet. Vi bruker også setType metode for å begrense søkeresultatene til videoer bare. På dette tidspunktet bør klassen se slik ut:

pakke com.hathi.simpleplayer; offentlig klasse YoutubeConnector private YouTube youtube; privat YouTube.Search.List spørring; // Din utvikler nøkkel går her offentlig statisk endelig String KEY = "AIzaSQZZQWQQWMGziK9H_qRxz8g-V6eDL3QW_Us"; offentlig YoutubeConnector (Context context) youtube = ny YouTube.Builder (ny NetHttpTransport (), ny JacksonFactory (), ny HttpRequestInitializer () @Override public void initialize (HttpRequest hr) kaster IOException ) setApplicationName (content.getString (R.string.app_name)) bygge (.); prøv query = youtube.search (). liste ("id, snippet"); query.setKey (KEY); query.setType ( "video"); query.setFields ( "elementer (id / VIDEOID, tekstutdrag / tittel, tekstutdrag / beskrivelse, tekstutdrag / thumbnails / default / url)");  catch (IOException e) Log.d ("YC", "Kunne ikke initialisere:" + e); 

Deretter oppretter vi en metode som heter Søke å utføre søket basert på brukerens søkeord. Denne metoden aksepterer søkeordene som en string parameter. De spørsmål variabel setQ Metoden brukes til å sette søkeordene.

Vi kjører deretter spørringen ved hjelp av den henrette metode. Resultatene returneres i form av a SearchListResponse forekomst. Vi repeterer gjennom resultatene og lager en ny Liste av VideoItem objekter, som vil være verdien av denne metoden. Etter at du har lagt til riktig feilhåndtering, vil Søke metoden skal se slik ut:

offentlig liste søk (streng søkeord) query.setQ (søkeord); prøv SearchListResponse response = query.execute (); Liste resultater = respons.getItems (); Liste elementer = ny ArrayList(); for (SearchResult resultat: resultater) VideoItem item = 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 (pos);  returelementer;  fangst (IOException e) Log.d ("YC", "Kunne ikke søke:" + e); return null;  

9. Lag SearchActivity

Opprett en ny klasse som heter SearchActivity.java. Denne klassen har felt som representerer visningene vi nevnte i activity_search.xml. Den har også a handler for å gjøre oppdateringer på brukergrensesnitt-tråden.

I onCreate metode, vi initialiserer visningene og legger til en OnEditorActionListener til EditText å vite når brukeren er ferdig med å skrive inn søkeord.

offentlig klasse SearchActivity utvider Aktivitet privat EditText searchInput; private ListView videosFound; Privat Handler Handler; @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 = ny Handler (); searchInput.setOnEditorActionListener (ny TextView.OnEditorActionListener () @Override public boolean onEditorAction (TextView v, int actionId, KeyEvent-hendelse) if (actionId == EditorInfo.IME_ACTION_DONE) searchOnYoutube (v.getText (). toString ()); return false; return true;);  

Du må ha lagt merke til anropet til searchOnYoutube metode. La oss definere metoden nå. I denne metoden lager vi en ny Tråd å initialisere en YoutubeConnector forekomme og drive sin Søke metode. En ny tråd er nødvendig, fordi nettverksoperasjoner ikke kan utføres på hovedbrukergrensesnittet. Hvis du glemmer å gjøre dette, vil du møte et runtime unntak. Når resultatene er tilgjengelige, vil behandleren brukes til å oppdatere brukergrensesnittet.

privat liste Søkeresultater; private void searchOnYoutube (final string-søkeord) new thread () public void run () YoutubeConnector yc = ny YoutubeConnector (SearchActivity.this); searchResults = yc.search (søkeord); handler.post (nytt Runnable () public void run () updateVideosFound (););  .start(); 

I updateVideosFound metode, genererer vi en ArrayAdapter og send det videre til Listevisning for å vise søkeresultatene. I getView Metoden til adapteren, vi blåser opp video_item.xml layout og oppdater visningene for å vise informasjon om søkeresultatet.

Picasso biblioteket er laste Metoden brukes til å hente miniatyrbildet av videoen og inn i Metoden brukes til å overføre den til Imageview.

privat ugyldig oppdateringVideosFound () ArrayAdapter adapter = ny ArrayAdapter(getApplicationContext (), R.layout.video_item, searchResults) @Override public Vis getView (int posisjon, se convertView, ViewGroup forelder) if (convertView == null) convertView = getLayoutInflater (). oppblåse (R.layout. video_item, foreldre, falsk);  ImageView thumbnail = (ImageView) convertView.findViewById (R.id.video_thumbnail); TextView title = (TextView) convertView.findViewById (R.id.video_title); TextView description = (TextView) convertView.findViewById (R.id.video_description); VideoItem searchResult = searchResults.get (posisjon); . Picasso.with (getApplicationContext ()) belastning (searchResult.getThumbnailURL ()) til (miniatyr.); title.setText (searchResult.getTitle ()); description.setText (searchResult.getDescription ()); returnere konvertereView; ; videosFound.setAdapter (adapter);  

Endelig trenger vi en metode som setter OnItemClickListener av Listevisning slik at brukeren kan klikke på et søkeresultat og se den tilhørende videoen. La oss nevne denne metoden addClickListener og ring det på slutten av onCreate metode.

Når et element i listen er tappet, oppretter vi en ny Intent for PlayerActivity og passere i IDen til videoen. Først når Intent er opprettet, den startActivity Metoden brukes til å starte PlayerActivity.

privat ugyldig addClickListener () videosFound.setOnItemClickListener (ny AdapterView.OnItemClickListener () @Override public void onItemClick (AdapterView av, Vis v, int pos, lang id) Intent intention = new Intent (getApplicationContext (), PlayerActivity.class); intent.putExtra ("VIDEO_ID", searchResults.get (pos) .getId ()); startActivity (hensikt); ); 

10. Opprett PlayerActivity

Opprett en ny Java-klasse som heter PlayerActivity.java som arver fra YouTubeBaseActivity. Dette er viktig, fordi bare underklasser av YouTubeBaseActivity kan gjøre bruk av YouTubePlayerView.

Denne klassen har en enkelt variabel som representerer YouTubePlayerView vi nevnte i activity_player.xml layoutfil. Dette initialiseres i onCreate metode ved å påkalle initialiseringsmetoden til YouTubePlayerView klasse, passerer i utviklerens API-nøkkel.

Deretter må vår klasse implementere OnInitializedListener grensesnitt for å vite når initialiseringen er fullført. Grensesnittet har to metoder, oppkalt onInitializationFailure og onInitializationSuccess.

I tilfelle av suksess, cueVideo Metoden brukes til å vise YouTube-videoen. Ved feil, a Skål vises som forteller brukeren at initialiseringen mislyktes.

Dette er hva PlayerActivity klassen skal se ut som:

offentlig klasse PlayerActivity utvider YouTubeBaseActivity implementerer OnInitializedListener privat YouTubePlayerView playerView; @Override protected void onCreate (Bundle bundle) super.onCreate (bunt); setContentView (R.layout.activity_player); playerView = (YouTubePlayerView) findViewById (R.id.player_view); playerView.initialize (YoutubeConnector.KEY, dette);  @Override public void onInitializationFailure (leverandørleverandør, YouTubeInitializationResult resultat) Toast.makeText (dette, getString (R.string.failed), Toast.LENGTH_LONG) .show ();  @Override public void onInitializationSuccess (Leverandørleverandør, YouTubePlayer-spiller, boolsk gjenopprettet) hvis (!)) Player.cueVideo (getIntent (). GetStringExtra ("VIDEO_ID"));  

11. kompilere og kjøre

Vår YouTube-klient er nå klar til å bli distribuert til en Android-enhet. Nesten alle populære Android-enheter har den installert, men sørg for at YouTube-appen er installert og oppdatert på enheten, fordi vår app er avhengig av den.

Når du er distribuert, bør du kunne skrive inn en spørring for å søke etter videoer på YouTube, og deretter klikke på et resultat for å begynne å spille den tilsvarende videoen.

Konklusjon

Du kan nå legge inn YouTube-videoer i Android-appen din. Du har også lært hvordan du bruker Google API-klientbiblioteket og samhandler med YouTube. Android Player API gir mange metoder for å kontrollere avspillingen av videoene, og du kan bruke dem til å komme opp med svært kreative apper. Se den komplette referanseguideen for å lære mer om API-en.