Erstellen Sie einen YouTube-Client auf Android

Was Sie erstellen werden

Bei Google Play gibt es viele beliebte YouTube-Clients von Drittanbietern, wie Viral Popup und PlayTube, die es schaffen, einige einzigartige und zusätzliche Funktionen zu bieten, die die offizielle YouTube-App nicht bietet. Wenn Sie eine solche App selbst erstellen möchten, ist dieses Tutorial für Sie.

In diesem Lernprogramm erstellen wir einen eigenen YouTube-Client, der auf YouTube nicht nur Videos suchen, sondern auch abspielen kann. Auf diese Weise lernen wir, wie Sie die YouTube-Player-API von YouTube und die YouTube-Data-API-Clientbibliothek für Java verwenden können.

Voraussetzungen

Stellen Sie sicher, dass Sie das neueste Eclipse ADT-Bundle eingerichtet haben. Sie können es auf der Android Developer-Website herunterladen.

Sie benötigen außerdem einen Entwicklerschlüssel, um die YouTube-API verwenden zu können. Folgen Sie den Schritten auf der YouTube Developer-Website von Google, um eine zu erhalten.

1. Erstellen Sie ein neues Projekt

Starten Sie Eclipse und erstellen Sie eine neue Android-Anwendung. Benennen Sie die Anwendung, SimplePlayer. Wählen Sie einen eindeutigen Paketnamen und legen Sie das fest mindestens erforderliches SDK zu Android 2.2 und das Ziel-SDK zu Android 4.X (L-Vorschau).

Wir werden die erstellen Aktivität uns selbst so abwählen Aktivität erstellen und klicken Sie auf Fertig.

2. Bibliotheken hinzufügen

Schritt 1: Laden Sie Bibliotheken herunter

Für dieses Projekt benötigen Sie folgende Bibliotheken:

  • YouTube Android Player-API: Mit dieser Bibliothek kann Ihre App YouTube-Videos nahtlos einbetten und steuern. Zum Zeitpunkt des Schreibens ist die neueste Version dieser Bibliothek 1.0.0. Sie können es von der Google Developers-Website herunterladen.
  • YouTube Data API v3-Clientbibliothek für Java: Mit dieser Bibliothek kann Ihre App Informationen auf YouTube abfragen. Wir werden es nutzen, damit unsere App auf YouTube nach Videos suchen kann. Dies ist auch auf der Google Developers-Website verfügbar.
  • Picasso: Diese Bibliothek erleichtert das Abrufen und Anzeigen von Remote-Bildern. Wir werden es verwenden, um Miniaturen von YouTube-Videos abzurufen. Die aktuellste Version ist derzeit 2.4.0 und Sie können es direkt aus dem Maven-Repository herunterladen.

Schritt 2: Bibliotheken hinzufügen

Um die YouTube Android Player-API hinzuzufügen, entpacken Sie sie YouTubeAndroidPlayerApi-1.0.0.zip und kopiere die Datei YouTubeAndroidPlayerApi.jar zum Libs Ordner Ihres Projekts.

Um die YouTube Data API v3-Bibliothek und ihre Abhängigkeiten hinzuzufügen, entpacken Sie sie google-api-services-youtube-v3-rev124-java-1.19.0.zip und kopiere die folgenden Dateien in die Libs Ordner Ihres Projekts:

  • 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

Zum Schluss fügen Sie Picasso hinzu picasso-2.4.0.jar zum Libs Ordner Ihres Projekts.

3. Bearbeiten Sie das Manifest

Die einzige Erlaubnis, die unsere App benötigt, ist android.permission.INTERNET um auf die Server von YouTube zuzugreifen. Fügen Sie Folgendes zu hinzu AndroidManifest.xml:

Unsere App bietet zwei Aktivitäten: eine für die Suche nach Videos und eine für die Wiedergabe. Um nicht mit Orientierungsänderungen umgehen zu müssen, zwingen wir beide Aktivitäten, nur den Querformatmodus zu verwenden. Deklarieren Sie die Aktivitäten im Manifest, indem Sie den folgenden Code hinzufügen:

      

4. Bearbeiten Sie die Datei strings.xml

Das res / values ​​/ strings.xml Die Datei enthält die von unserer App verwendeten Zeichenfolgen. Aktualisieren Sie den Inhalt wie folgt:

 SimplePlayer Suche Youtube Player konnte nicht initialisiert werden 

5. Erstellen Sie ein Layout für SearchActivity

Schritt 1: Layout erstellen

SearchActivity benötigt die folgenden Ansichten:

  • Text bearbeiten: um dem Benutzer zu erlauben, die Suchschlüsselwörter einzugeben
  • Listenansicht: um die Suchergebnisse anzuzeigen
  • LinearLayout: Diese Ansicht dient als übergeordnete Ansicht der zuvor genannten Ansichten

Erstellen Sie eine neue Datei mit dem Namen layout / activity_search.xml und fügen Sie den folgenden Code hinzu:

    

Schritt 2: Layout Out Search Results

Jedes Suchergebnis bezieht sich auf ein Video auf YouTube und wir benötigen ein Layout, um Informationen zu diesem Video anzuzeigen. Daher ist jedes Element der Listenansicht muss die folgenden Ansichten enthalten:

  • Bildansicht: um die Miniaturansicht des Videos anzuzeigen
  • Textvorschau: um den Titel des Videos anzuzeigen
  • Textvorschau: um die Beschreibung des Videos anzuzeigen
  • RelativesLayout: Diese Ansicht fungiert als übergeordnete Ansicht der anderen Ansichten

Erstellen Sie eine Datei mit dem Namen layout / video_item.xml und fügen Sie den folgenden Code hinzu:

     

6. Erstellen Sie ein Layout für PlayerActivity

Schritt 1: Layout erstellen

PlayerActivity benötigt die folgenden Ansichten:

  • YouTubePlayerView: um YouTube-Videos abzuspielen
  • LinearLayout: Diese Ansicht ist die übergeordnete Ansicht von YouTubePlayerView

Erstellen Sie eine neue Datei mit dem Namen layout / activity_player.xml und fügen Sie den folgenden Code hinzu:

   

7. Anlegen VideoItem

Erstellen Sie eine neue Java-Klasse mit dem Namen VideoItem.java. Wir verwenden diese Klasse, um die folgenden Informationen zu einem YouTube-Video zu speichern:

  • YouTube-ID
  • Titel
  • Beschreibung
  • Thumbnail-URL

Alle oben genannten werden als Zeichenfolgen gespeichert. Nach dem Hinzufügen der Getter und Setter für jeden von ihnen, VideoItem.java Die Datei sollte folgenden Inhalt haben:

Paket com.hathi.simpleplayer; öffentliche Klasse VideoItem private String title; private String-Beschreibung; private Zeichenfolge thumbnailURL; private String-ID; 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 (Stringbeschreibung) this.description = description;  public String getThumbnailURL () return thumbnailURL;  public void setThumbnailURL (String-Miniaturansicht) this.thumbnailURL = Miniaturansicht; 

8. Erstellen Sie eine Helferklasse

Um zu vermeiden, dass Sie sich direkt mit der YouTube-Daten-API befassen müssen Aktivität, Erstellen Sie eine neue Java-Klasse und benennen Sie sie YoutubeConnector.java. Diese Klasse hat die folgenden Member-Variablen:

  • eine Instanz der Youtube Klasse, die für die Kommunikation mit der YouTube-API verwendet wird
  • eine Instanz von YouTube.Search.List eine Suchanfrage darstellen
  • den YouTube-API-Schlüssel als statisch String

Wir initialisieren die obigen Variablen im Konstruktor. Die Instanz von initialisieren Youtube, das YouTube.Builder Klasse muss verwendet werden. Die Klassen, die für die Netzwerkverbindung und die JSON-Verarbeitung verantwortlich sind, werden an den Builder übergeben.

Einmal initialisiert, ist es Suche Diese Methode wird zum Erstellen einer Suchabfrage verwendet. Das Liste Diese Methode wird dann verwendet, um die gewünschten Details in den Suchergebnissen zu erwähnen. Für dieses Tutorial benötigen wir eine Ich würde und Schnipsel für jedes Suchergebnis. Aus diesen extrahieren wir die folgenden Felder:

  • id / videoId
  • Ausschnitt / Titel
  • Ausschnitt / Beschreibung
  • Snippet / Thumbnails / Default / URL

Der API-Schlüssel des Entwicklers muss mit jeder Suchanfrage gesendet werden. Das setKey Methode wird zu diesem Zweck verwendet. Wir benutzen auch die setType Methode, um die Suchergebnisse einzuschränken Videos nur. Zu diesem Zeitpunkt sollte die Klasse ungefähr so ​​aussehen:

Paket com.hathi.simpleplayer; öffentliche Klasse YoutubeConnector privates YouTube youtube; private YouTube.Search.List-Abfrage; // Ihr Entwicklerschlüssel geht hier ein public static final String KEY = "AIzaSQZZQWQQWMGziK9H_qRxz8g-V6eDL3QW_Us"; public YoutubeConnector (Kontext-Kontext) youtube = new YouTube.Builder (new NetHttpTransport (), neue JacksonFactory (), neuer HttpRequestInitializer () @Override) public void initialize (HttpRequest hr) löst IOException  aus. setApplicationName (content.training) (R.string.app_name)). Build (); try query = youtube.search (). list ("id, snippet"); 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", "Konnte nicht initialisieren:" + e); 

Als Nächstes erstellen wir eine Methode mit dem Namen Suche um die Suche anhand der Schlüsselwörter des Benutzers durchzuführen. Diese Methode akzeptiert die Schlüsselwörter als String Parameter. Das Abfrage Variablen setQ Diese Methode wird verwendet, um die Schlüsselwörter festzulegen.

Wir führen dann die Abfrage mit seinem aus ausführen Methode. Die Ergebnisse werden in Form von a zurückgegeben SearchListResponse Beispiel. Wir durchlaufen die Ergebniselemente und erstellen eine neue Liste von VideoItem Objekte, die der Rückgabewert dieser Methode sind. Nach dem Hinzufügen der entsprechenden Fehlerbehandlung wird die Suche Methode sollte so aussehen:

öffentliche Liste search (String-Schlüsselwörter) query.setQ (Schlüsselwörter); try SearchListResponse response = query.execute (); Liste Ergebnisse = Response.getItems (); Liste items = new ArrayList(); für (SearchResult result: results) 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 (item);  Artikel zurücksenden;  catch (IOException e) Log.d ("YC", "Konnte nicht suchen:" + e); null zurückgeben;  

9. Erstellen Sie SearchActivity

Erstellen Sie eine neue Klasse mit dem Namen SearchActivity.java. Diese Klasse hat Felder, die die Ansichten darstellen, die wir erwähnt haben activity_search.xml. Es hat auch eine Handler Aktualisierungen am Benutzeroberflächen-Thread vornehmen.

In dem onCreate Methode, initialisieren wir die Ansichten und fügen eine hinzu OnEditorActionListener zum Text bearbeiten um zu wissen, wann der Benutzer die Schlüsselwörter eingegeben hat.

public class SearchActivity erweitert Aktivität private EditText searchInput; private ListView videosFound; privater 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 = neuer Handler (); searchInput.setOnEditorActionListener (neuer TextView.OnEditorActionListener () @Override public boolean onEditorAction (TextView v, int actionId, KeyEvent-Ereignis) if (actionId == EditorInfo.IME_ACTION_DONE) searchOnYoutube (v.t.). return false; return true;);  

Sie müssen den Anruf an der bemerkt haben Suche auf Youtube Methode. Definieren wir jetzt die Methode. In dieser Methode erstellen wir ein neues Faden a initialisieren YoutubeConnector Instanz und laufen seine Suche Methode. Ein neuer Thread ist erforderlich, da Netzwerkoperationen im Hauptbenutzeroberflächenthread nicht ausgeführt werden können. Wenn Sie dies vergessen, werden Sie mit einer Laufzeitausnahme konfrontiert. Sobald die Ergebnisse verfügbar sind, wird die Handler wird verwendet, um die Benutzeroberfläche zu aktualisieren.

private Liste Suchergebnisse; private void searchOnYoutube (abschließende String-Schlüsselwörter) neuer Thread () öffentlicher void run () YoutubeConnector yc = neuer YoutubeConnector (SearchActivity.this); searchResults = yc.search (Schlüsselwörter); handler.post (new Runnable () public void run () updateVideosFound (););  .Start(); 

In dem updateVideosFound Methode erzeugen wir eine ArrayAdapter und lass es an die Listenansicht um die Suchergebnisse anzuzeigen. In dem getView Methode des Adapters blasen wir die auf video_item.xml Layout und aktualisieren Sie seine Ansichten, um Informationen zum Suchergebnis anzuzeigen.

Die Picasso-Bibliothek Belastung Diese Methode wird verwendet, um die Miniaturansicht des Videos und die in Diese Methode wird verwendet, um sie an Bildansicht.

private void updateVideosFound () ArrayAdapter adapter = new ArrayAdapter(getApplicationContext (), R.layout.video_item, searchResults) @Override public View getView (int-Position, View convertView, ViewGroup-übergeordnetes Element) if (convertView == null) convertView = getLayoutInflater (). inflate (R.layout). video_item, parent, 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 searchResult = searchResults.get (Position); Picasso.with (getApplicationContext ()). Load (searchResult.getThumbnailURL ()). Into (Miniaturansicht); title.setText (searchResult.getTitle ()); description.setText (searchResult.getDescription ()); return convertView; ; videosFound.setAdapter (Adapter);  

Schließlich brauchen wir eine Methode, die das festlegt OnItemClickListener des Listenansicht damit der Benutzer auf ein Suchergebnis klicken und das entsprechende Video ansehen kann. Nennen wir diese Methode addClickListener und nenne es am Ende des onCreate Methode.

Wenn Sie auf ein Element in der Liste tippen, erstellen wir ein neues Element Absicht für die PlayerActivity und geben Sie die ID des Videos ein. Einmal die Absicht entsteht, die startActivity Methode wird verwendet, um die PlayerActivity.

privater void addClickListener () videosFound.setOnItemClickListener (neuer AdapterView.OnItemClickListener () @Override public void onItemClick (AdapterView) av, Ansicht v, int pos, long id) Intent Intent = new Intent (getApplicationContext (), PlayerActivity.class); intent.putExtra ("VIDEO_ID", searchResults.get (pos) .getId ()); startActivity (Absicht); ); 

10. Anlegen PlayerActivity

Erstellen Sie eine neue Java-Klasse mit dem Namen PlayerActivity.java das erbt von YouTubeBaseActivity. Dies ist wichtig, da nur Unterklassen der YouTubeBaseActivity kann das nutzen YouTubePlayerView.

Diese Klasse verfügt über eine einzige Membervariable, die die. Repräsentiert YouTubePlayerView wir haben in der erwähnt activity_player.xml Layoutdatei. Dies wird in der initialisiert onCreate Methode durch Aufrufen der Initialisierungsmethode von YouTubePlayerView Klasse, den Entwickler-API-Schlüssel übergeben.

Als nächstes muss unsere Klasse das implementieren OnInitializedListener Schnittstelle, um zu wissen, wann die Initialisierung abgeschlossen ist. Die Schnittstelle hat zwei Methoden, genannt onInitializationFailure und onInitializationSuccess.

Im Erfolgsfall wird der cueVideo Diese Methode wird verwendet, um das YouTube-Video anzuzeigen. Im Fehlerfall a Toast wird angezeigt, das dem Benutzer mitteilt, dass die Initialisierung fehlgeschlagen ist.

Das ist was der PlayerActivity Klasse sollte aussehen:

public class PlayerActivity erweitert YouTubeBaseActivity implementiert OnInitializedListener private YouTubePlayerView playerView; @Override protected void onCreate (Bundle-Paket) super.onCreate (Bundle); setContentView (R.layout.activity_player); playerView = (YouTubePlayerView) findViewById (R.id.player_view); playerView.initialize (YoutubeConnector.KEY, this);  @Override public void onInitializationFailure (Provideranbieter, Ergebnis YouTubeInitializationResult) Toast.makeText (this getString (R.string.failed), Toast.LENGTH_LONG) .show ();  @Override public void onInitializationSuccess (Provideranbieter, YouTubePlayer-Player, boolescher Wiederherstellungsmodus) if (! Restore) player.cueVideo (getIntent (). GetStringExtra ("VIDEO_ID"));  

11. Kompilieren und ausführen

Unser YouTube-Client kann jetzt auf einem Android-Gerät bereitgestellt werden. Fast alle gängigen Android-Geräte haben es installiert, aber stellen Sie sicher, dass die YouTube-App auf dem Gerät installiert ist und auf dem neuesten Stand ist, da unsere App davon abhängt.

Nach der Bereitstellung sollten Sie in der Lage sein, eine Suchanfrage einzugeben, um nach Videos auf YouTube zu suchen, und dann auf ein Ergebnis klicken, um das entsprechende Video abzuspielen.

Fazit

Sie wissen jetzt, wie Sie YouTube-Videos in Ihre Android-App einbetten. Sie haben auch gelernt, wie Sie die Google API-Client-Bibliothek verwenden und mit YouTube interagieren können. Die Android-Player-API bietet eine Vielzahl von Methoden zur Steuerung der Wiedergabe der Videos. Mit ihnen können Sie sehr kreative Apps erstellen. Weitere Informationen zur API finden Sie im vollständigen Referenzhandbuch.