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.
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.
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.
Für dieses Projekt benötigen Sie folgende Bibliotheken:
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:
Zum Schluss fügen Sie Picasso hinzu picasso-2.4.0.jar zum Libs Ordner Ihres Projekts.
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:
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
SearchActivity
SearchActivity
benötigt die folgenden Ansichten:
Text bearbeiten
: um dem Benutzer zu erlauben, die Suchschlüsselwörter einzugebenListenansicht
: um die Suchergebnisse anzuzeigenLinearLayout
: Diese Ansicht dient als übergeordnete Ansicht der zuvor genannten AnsichtenErstellen Sie eine neue Datei mit dem Namen layout / activity_search.xml und fügen Sie den folgenden Code hinzu:
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 anzuzeigenTextvorschau
: um den Titel des Videos anzuzeigenTextvorschau
: um die Beschreibung des Videos anzuzeigenRelativesLayout
: Diese Ansicht fungiert als übergeordnete Ansicht der anderen AnsichtenErstellen Sie eine Datei mit dem Namen layout / video_item.xml und fügen Sie den folgenden Code hinzu:
PlayerActivity
PlayerActivity
benötigt die folgenden Ansichten:
YouTubePlayerView
: um YouTube-Videos abzuspielenLinearLayout
: 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:
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:
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;
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:
Youtube
Klasse, die für die Kommunikation mit der YouTube-API verwendet wirdYouTube.Search.List
eine Suchanfrage darstellenString
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 Listesearch (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;
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 ListeSuchergebnisse; 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 () ArrayAdapteradapter = 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); );
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"));
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.
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.