Lag en YouTube-klient på Android

Create en YouTube-klient på Android
45
Del
4
Del

Dette Cyber ​​mandag Envato Tuts + Kursene vil bli redusert til bare $ 3. Ikke gå glipp av.
Hva du skal lage

Det finnes en rekke populære tredjeparts YouTube klienter på Google Play, som Viral Popup og PlayTube, som klarer å tilby noen unike og ekstra funksjonalitet som offisielle YouTube-appen gjør det ikke. Hvis du ønsker å bygge en slik app selv, er denne opplæringen for deg.

I denne opplæringen, vi skaper vår egen YouTube-klient som ikke bare kan søke etter videoer på YouTube, men også spille dem. Gjør du det, vil vi lære å gjøre bruk av YouTube Android Player API og YouTube-data API klientbiblioteket for Java.

Forutsetninger

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

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

1. Opprett et nytt prosjekt

Fyr opp Eclipse og opprette en ny Android-applikasjon. Navn søknaden, SimplePlayer. Velg en unik pakke navn, og sette minstekravet SDK til Android 2.2 og målet SDK til Android 4.x (L Preview).

Vi kommer til å skape aktivitet oss så fjerner markeringen skape aktivitet og klikk Fullfør.

2. Legge Biblioteker

Trinn 1: Last ned biblioteker

Du trenger følgende biblioteker for dette prosjektet:

YouTube Android Player API: Dette biblioteket lar appen embed og kontrollere YouTube-videoer sømløst. I skrivende stund er den nyeste versjonen av dette biblioteket 1.0.0. Du kan laste det ned fra Google Developers nettsiden

YouTube data API v3 klientbiblioteket for Java. Dette biblioteket lar appen spørring informasjon om YouTube. Vi kommer til å bruke den til å muliggjøre vår app for å søke etter videoer på YouTube. Dette er også tilgjengelig på Google Developers nettsiden

Picasso. Dette biblioteket gjør det enkelt å hente og vise eksterne bilder. Vi kommer til å bruke den til å hente miniatyrer av YouTube-videoer. Den nyeste versjonen er for tiden 2.4.0, og du kan laste den ned direkte fra Maven repository

Trinn 2:. Legg Biblioteker

For å legge til YouTube Android Player API, pakk YouTubeAndroidPlayerApi- 1.0.0.zip og kopiere filen YouTubeAndroidPlayerApi.jar til libs mappe for prosjektet.

For å legge til YouTube-data API v3 biblioteket og dets avhengigheter, pakk google-API-tjenester-youtube-v3-rev124 -java-1.19.0.zip og kopiere følgende filer til libs mappen din project:


google-api-services-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

Finally, å legge til Picasso, kopiere Picasso-2.4.0.jar til libs mappe for prosjektet.

3. Redigere Manifest

Den eneste tillatelse vår app trenger er android.permission.INTERNET å få tilgang til YouTube-servere. Legg til følgende AndroidManifest.xml:
< bruker-tillatelse android: name = "android.permission.INTERNET" />

Vår app har to aktiviteter, en til å søke etter videoer og en til å spille dem. For å slippe å håndtere orienterings endringer i denne opplæringen, tvinger vi begge aktivitetene å bare bruke liggende modus. Erklærer aktivitetene i manifestet ved å legge til følgende kode i det:
< aktivitet android: ". SearchActivity" name = android: screenOrientation = "landskapet" > < intent-filter > < handling android: name = "android.intent.action.MAIN" /> < kategori android: name = "android.intent.category.LAUNCHER" /> < /intent-filter > < /aktivitets > < aktivitet android: name = "PlayerActivity." android: screenOrientation = "landskapet" />
4. Edit strings.xml

res /verdier /strings.xml filen inneholder strenger som vår app bruker. Oppdatere innholdet som vist nedenfor:
< resources > < string name = "APP_NAME" > SimplePlayer < /string > < string name = "søk" > Search < /string > < string name = "feilet" > Kunne ikke initial Youtube Player < /string > < /ressurser >
5. Lag Layout for SearchActivity

Trinn 1: Lag Layout

SearchActivity trenger følgende visninger:

EditText: å tillate brukeren å skrive i søkeordene

Listview: å vise søkeresultatene

LinearLayout: dette synet fungerer som den overordnede syn på de nevnte synspunkter

Opprett en ny fil med navnet layout /activity_search.xml og legge til følgende kode i det:?
< xml version = "1.0" encoding = "UTF-8" > < LinearLayout xmlns: android = "http: //schemas.android.com/apk/res/android "android: layout_width =" match_parent "android: layout_height =" match_parent "android: orientering =" vertikal "> < EditText android: layout_width = "match_parent" android: layout_height = "wrap_content" android: hint = "@ streng /søk" android: id = "+ id /search_input" android: Single = "true" /> < Listview android: id = "+ id /videos_found" android: layout_width = "match_parent" android: layout_height = "match_parent" android: dividerHeight = "5dp" /> < /LinearLayout >
Trinn 2: Layout Out Søkeresultater

Hver søkeresultat refererer til en video på YouTube, og vi trenger en layout for å vise informasjon om den videoen. Derfor hvert element av Listview må inneholde følgende visninger:

Imageview: å vise miniatyrbildet av video

TextView: å vise tittelen på videoen

TextView: å vise beskrivelsen av videoen

RelativeLayout: Denne visningen fungerer som den overordnede syn på de andre visningene

Lag en fil som heter layout /video_item XML og legge til følgende kode i det:?
< xml version = "1.0" encoding = "UTF-8" > < RelativeLayout xmlns:? android = "http://schemas.android.com/apk /res /android "android: layout_width =" match_parent "android: layout_height =" match_parent "android: padding =" 16dp "> < Imageview android: id = "+ id /video_thumbnail" android: layout_width = "128dp" android: layout_height = "128dp" android: layout_alignParentLeft = "true" android: layout_alignParentTop = "true" android: layout_marginRight = "20dp" /> < TextView android: id = "+ id /video_title" android: layout_width = "wrap_content" android: layout_height = "wrap_content" android: layout_toRightOf = "+ id /video_thumbnail" android: layout_alignParentTop = "true" android: layout_marginTop = "5dp" android: Tekststørrelse = "25sp" android: textStyle = "fet" /> < TextView android: id = "+ id /video_description" android: layout_width = "wrap_content" android: layout_height = "wrap_content" android: layout_toRightOf = "+ id /video_thumbnail" android: layout_below = "+ id /video_title" android: Tekststørrelse = "15sp" /> < /RelativeLayout >
6. Lag Layout for PlayerActivity

Trinn 1: Lag Layout

PlayerActivity trenger følgende visninger:

YouTubePlayerView: å spille YouTube-videoer

LinearLayout: dette synet er den overordnede syn på YouTubePlayerView

Opprett en ny fil med navnet layout /activity_player.xml og legge til følgende kode i det:?
< xml version = "1.0" encoding = "UTF-8" > < LinearLayout xmlns:? android = "http://schemas.android.com/apk/res/android" android: layout_width = "match_parent" android: layout_height = "match_parent "android: orientering =" vertikal "> < com.google.android.youtube.player.YouTubePlayerView android: id = "+ id /player_view" android: layout_width = "match_parent" android: layout_height = "wrap_content" /> < /LinearLayout >
7. Opprett VideoItem

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

YouTube ID

tittelen

beskrivelse

thumbnail URL Anmeldelser

Alle de ovennevnte er lagret som strenger. Etter å legge de kundeskaffere og settere for hver av dem, bør VideoItem.java filen har følgende innhold:
pakken com.hathi.simpleplayer; public class VideoItem {private String tittel; private String beskrivelse; private String thumbnailURL; private String id; public String getId () {return id; } Public void SETID (String id) {this.id = id; } Public String getTitle () {return tittel; } Public void setTitle (String tittel) {this.title = tittel; } Public String getDescription () {return beskrivelse; } Public void setDescription (String beskrivelse) {this.description = beskrivelse; } Public String getThumbnailURL () {return thumbnailURL; } Public void setThumbnailURL (String thumbnail) {this.thumbnailURL = thumbnail; }}
8. Lag en Helper Class

For å slippe å forholde seg til YouTube data API direkte i vår aktivitet, opprette en ny Java-klassen og gi den navnet YoutubeConnector.java. Denne klassen har følgende medlem variabler:

en forekomst av YouTube klassen som skal brukes for å kommunisere med YouTube API

en forekomst av YouTube.Search.List å representere en søket

YouTube API-nøkkel som en statisk String

Vi initial de ovennevnte variablene i konstruktøren. Initialisere forekomst av YouTube, har YouTube.Builder klassen som skal brukes. Klassene som vil være ansvarlig for nettverkstilkoblingen og JSON behandling sendes til byggherren.

Når initialisert, er dens søkemetode som brukes til å lage en søkeforespørsel. Listen metoden er så brukt til å nevne de detaljene vi ønsker i søkeresultatene. For denne opplæringen, vi kommer til å trenge en id og tekstutdrag for hvert søkeresultat. Fra disse, vi trekke følgende fields:


id/videoId

snippet/title

snippet/description

snippet/thumbnails/default/url


The utbyggers API-nøkkel må sendes med hvert søk. Den setKey metoden benyttes for dette formål. Vi bruker også setType metode for å begrense søkeresultatene til videoer bare. På dette punktet, bør klassen se omtrent slik ut:
pakken com.hathi.simpleplayer; public class YoutubeConnector {private YouTube youtube; private YouTube.Search.List søket; //Din utviklernøkkel går her public static endelige String key = "AIzaSQZZQWQQWMGziK9H_qRxz8g-V6eDL3QW_Us"; offentlig YoutubeConnector (Context kontekst) {youtube = new YouTube.Builder (ny NetHttpTransport (), ny JacksonFactory (), ny HttpRequestInitializer () {Override public void initialize (HttpRequest hr) kaster IOException {}}). setApplicationName (content.getString (R.string.app_name)) bygge (.); try {query = youtube.search () liste ("id, biten."); query.setKey (KEY); query.setType ("video"); query.setFields("items(id/videoId,snippet/title,snippet/description,snippet/thumbnails/default/url)"); } catch (IOException e) {Log.d ("YC", "Kunne ikke initialisere:" + e); }}}

Deretter oppretter vi en metode som heter søk for å utføre søk basert på brukerens søkeord. Denne metoden aksepterer søkeord som en String parameter. Spørringen variabel setQ metode brukes for å sette søkeordene.

Vi deretter kjøre spørringen ved hjelp av sin utføre metoden. Resultatene er tilbake i form av en SearchListResponse eksempel. Vi iterere gjennom resultatpostene og opprette en ny liste over VideoItem gjenstander, som vil være returverdien av denne metoden. Etter å legge passende feilbehandling, bør søkemetode se slik ut:
offentlig List < VideoItem > Søk (String nøkkelord) {query.setQ (nøkkelord); try {SearchListResponse respons = query.execute (); List < Søkeresultat > Resultater = response.getItems (); List < VideoItem > elementer = new Arraylist < VideoItem > (); for (Søkeresultat resultat: resultater) {VideoItem element = 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 (element); } Returnere elementer; } catch (IOException e) {Log.d ("YC", "Kunne ikke søke:" + e); returnere null; }}
9. Opprett SearchActivity

Opprett en ny klasse som heter SearchActivity.java. Denne klassen har felt som representerer synspunktene vi nevnte i activity_search.xml. Det har også en Handler for å gjøre oppdateringer på brukergrensesnittet tråden.

I onCreate metoden, initial vi utsikten og legge en OnEditorActionListener til EditText å vite når brukeren er ferdig å skrive inn søkeord.
Offentlig klasse SearchActivity strekker Aktivitet {private EditText searchInput; private Listview videosFound; private Handler handler; Override Beskyttet 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 (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 kallet til searchOnYoutube metoden. La oss definere metoden nå. I denne metoden, skaper vi en ny tråd å klargjøre en YoutubeConnector forekomst og kjøre sin søkemetode. En ny tråd er nødvendig, fordi nettvirksomheten ikke kan utføres på hovedbrukergrensesnittet tråden. Hvis du glemmer å gjøre dette, vil du møte en runtime unntak. Når resultatene er tilgjengelige, er føreren brukes til å oppdatere brukergrensesnitt
privat List <. VideoItem > search; private void searchOnYoutube (endelig String nøkkelord) {new Thread () {public void run () {YoutubeConnector yc = new YoutubeConnector (SearchActivity.this); search = yc.search (søkeord); handler.post (ny kjørbart () {public void run () {updateVideosFound ();}}); }\t\t}.begynne(); }

I updateVideosFound metoden, genererer vi en ArrayAdapter og gi det videre til Listview for å vise søkeresultatene. I getView metode for adapteren, vi blåse opp video_item.xml layout og oppdatere sine synspunkter for å vise informasjon om søkeresultatet.

The Picasso bibliotekets belastning metoden brukes til å hente miniatyren av video og inn Metoden brukes til å gi det til Imageview
private void updateVideosFound () {ArrayAdapter. < VideoItem > adapter = new ArrayAdapter < VideoItem > (getApplicationContext (), R.layout.video_item, search) {Override offentlig Vis getView (int posisjon, Utsikt convertView, ViewGroup forelder) {if (convertView == null) {convertView = getLayoutInflater () .inflate (R.layout.video_item, foreldre, false); } 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 Søkeresultat = searchResults.get (stilling); . Picasso.with (getApplicationContext ()) belastning (searchResult.getThumbnailURL ()) inn i (thumbnail).; title.setText (searchResult.getTitle ()); description.setText (searchResult.getDescription ()); returnere convertView; }}; videosFound.setAdapter (adapter);}

Til slutt trenger vi en metode som setter OnItemClickListener av Listview, slik at brukeren kan klikke på et søkeresultat og se på tilsvarende video. La oss kalle denne metoden addClickListener og kaller det på slutten av onCreate metoden.

Når et element i listen er tappet, skaper vi en ny intensjonsavtale for PlayerActivity og passere i ID av videoen. Når Intent blir opprettet, blir den startActivity metode som brukes for å starte PlayerActivity
private void addClickListener () {videosFound.setOnItemClickListener (ny AdapterView.OnItemClickListener () {Override public void onItemClick (AdapterView. ≪? ≫ av, Utsikt v, int pos, lang id) {Intent hensikt = new Intent (getApplicationContext (), PlayerActivity.class); intent.putExtra ("VIDEO_ID", searchResults.get (pos) .getId ()); startActivity (forsett);} });}
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 benytte seg av YouTubePlayerView.

Denne klassen har et enkelt medlem variabel som representerer YouTubePlayerView vi nevnte i activity_player.xml layout filen. Dette er initialisert i onCreate metoden ved å påberope seg initialize metoden i YouTubePlayerView klassen, passerer utvikleren API-nøkkel.

Deretter må implementere OnInitializedListener grensesnittet for å vite når initialisering er fullført klassen vår. Grensesnittet har to metoder, som heter onInitializationFailure og onInitializationSuccess.

I tilfelle av suksess, cueVideo metoden er brukt for å vise YouTube-video. I tilfelle svikt, er en Toast vist som forteller brukeren at det mislyktes

Dette er hva PlayerActivity klassen skal se ut.
Public class PlayerActivity strekker YouTubeBaseActivity implementerer OnInitializedListener {private YouTubePlayerView playerView; Override Beskyttet void onCreate (Bundle bundle) {super.onCreate (bundle); setContentView (R.layout.activity_player); playerView = (YouTubePlayerView) findViewById (R.id.player_view); playerView.initialize (YoutubeConnector.KEY, dette); }Override Public void onInitializationFailure (Provider leverandør, YouTubeInitializationResult resultat) {Toast.makeText (dette, getString (R.string.failed), Toast.LENGTH_LONG) .vis (); }Override Public void onInitializationSuccess (Provider leverandør, YouTubePlayer spiller, boolsk restaurert) {if (restaurert!) {Player.cueVideo (getIntent () getStringExtra ("VIDEO_ID").); }}}
11. Kompilere og kjøre

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

Når utplassert, bør du være i stand til å skrive inn en spørring for å søke etter videoer på YouTube, og klikk deretter på et resultat for å begynne å spille den tilsvarende video.

Konklusjon

Du vet nå hvordan å legge ned YouTube-videoer i Android app. Du har også lært hvordan du bruker Google API-klient biblioteket og samhandle med YouTube. Android Player API gir en rekke metoder for å kontrollere avspilling av videoer, og du kan bruke dem til å komme opp med svært kreative apps. Se fullstendig guide for å lære mer om API.



Previous:
Next Page: