Crea un cliente de YouTube en Android

Lo que vas a crear

Hay muchos clientes de YouTube populares de terceros en Google Play, como Viral Popup y PlayTube, que logran ofrecer algunas funciones únicas y adicionales que la aplicación oficial de YouTube no ofrece. Si quieres crear una de estas aplicaciones, este tutorial es para ti..

En este tutorial, creamos nuestro propio cliente de YouTube que no solo puede buscar videos en YouTube, sino también reproducirlos. Al hacerlo, aprenderemos cómo utilizar la API del Reproductor de Android de YouTube y la biblioteca de clientes de la API de datos de YouTube para Java.

Prerrequisitos

Asegúrese de tener la última configuración de Eclipse ADT Bundle. Puedes descargarlo en el sitio web de Android Developer..

También debe tener una clave de desarrollador para utilizar la API de YouTube. Sigue los pasos en el sitio web de Google Developer para obtener uno..

1. Crear un nuevo proyecto

Arranca Eclipse y crea una nueva aplicación para Android. Nombra la aplicación, SimplePlayer. Elija un nombre de paquete único y configure el SDK mínimo requerido a Android 2.2 y el SDK de destino a Android 4.X (L Preview).

Vamos a crear el Actividad nosotros mismos tan deseleccionar Crear actividad y haga clic Terminar.

2. Agregando bibliotecas

Paso 1: Descargar bibliotecas

Necesitará las siguientes bibliotecas para este proyecto:

  • API del reproductor Android de YouTube: Esta biblioteca le permite a su aplicación incrustar y controlar videos de YouTube sin problemas. Al momento de escribir este artículo, la última versión de esta biblioteca es 1.0.0. Puedes descargarlo desde el sitio web de Google Developers..
  • YouTube Data API v3 Client Library para Java: Esta biblioteca le permite a su aplicación consultar información en YouTube. Vamos a usarlo para permitir que nuestra aplicación busque videos en YouTube. Esto también está disponible en el sitio web de Google Developers..
  • Picasso: Esta biblioteca facilita la búsqueda y visualización de imágenes remotas. Vamos a usarlo para obtener miniaturas de los videos de YouTube. La última versión actualmente es 2.4.0 Y puedes descargarlo directamente desde el repositorio de Maven..

Paso 2: Añadir bibliotecas

Para agregar la API del reproductor de Android de YouTube, descomprima YouTubeAndroidPlayerApi-1.0.0.zip y copia el archivo YouTubeAndroidPlayerApi.jar al libs carpeta de tu proyecto.

Para agregar la biblioteca de YouTube Data API v3 y sus dependencias, descomprima google-api-services-youtube-v3-rev124-java-1.19.0.zip y copiar los siguientes archivos a la libs carpeta de tu proyecto:

  • 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

Por último, para añadir Picasso, copia. picasso-2.4.0.jar al libs carpeta de tu proyecto.

3. Edita el Manifiesto

El único permiso que necesita nuestra aplicación es android.permission.INTERNET para acceder a los servidores de YouTube. Agregue lo siguiente a AndroidManifest.xml:

Nuestra aplicación tiene dos actividades, una para buscar videos y otra para reproducirlos. Para evitar tener que manejar los cambios de orientación en este tutorial, forzamos ambas actividades a usar solo el modo horizontal. Declare las actividades en el manifiesto agregando el siguiente código:

      

4. Editar cadenas.xml

los res / values ​​/ strings.xml archivo contiene las cadenas que utiliza nuestra aplicación. Actualice su contenido como se muestra a continuación:

 SimplePlayer Buscar Error al inicializar el reproductor de YouTube 

5. Crear diseño para SearchActivity

Paso 1: Crear Diseño

SearchActivity Necesita las siguientes vistas:

  • Editar texto: para permitir que el usuario escriba las palabras clave de búsqueda
  • Vista de la lista: para mostrar los resultados de búsqueda
  • LinearLayout: esta vista sirve como vista principal de las vistas mencionadas anteriormente

Crear un nuevo archivo llamado layout / activity_search.xml y añádele el siguiente código:

    

Paso 2: Distribuir los resultados de búsqueda

Cada resultado de búsqueda se refiere a un video en YouTube y necesitamos un diseño para mostrar información sobre ese video. Por lo tanto, cada elemento de la Vista de la lista Necesita contener las siguientes vistas:

  • ImageView: para visualizar la miniatura del video
  • Vista de texto: para visualizar el título del video.
  • Vista de texto: para visualizar la descripción del video.
  • Disposición relativa: esta vista actúa como la vista padre de las otras vistas

Crea un archivo llamado layout / video_item.xml y añádele el siguiente código:

     

6. Crear diseño para JugadorActividad

Paso 1: Crear Diseño

JugadorActividad Necesita las siguientes vistas:

  • YouTubePlayerView: para reproducir videos de YouTube
  • LinearLayout: esta vista es la vista padre de YouTubePlayerView

Crear un nuevo archivo llamado layout / activity_player.xml y añádele el siguiente código:

   

7. Crear VideoItem

Crear una nueva clase de Java llamada VideoItem.java. Utilizamos esta clase para almacenar la siguiente información sobre un video de YouTube:

  • ID de YouTube
  • título
  • descripción
  • URL en miniatura

Todos los anteriores se almacenan como cadenas. Después de agregar los getters y setters para cada uno de ellos., VideoItem.java El archivo debe tener los siguientes contenidos:

paquete com.hathi.simpleplayer; clase pública VideoItem título de la cadena privada; descripción de la cadena privada; Cuerda privada thumbnailURL; ID de cadena privada; 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 (Descripción de la cadena) this.description = description;  public String getThumbnailURL () return thumbnailURL;  public void setThumbnailURL (Miniatura de cadena) this.thumbnailURL = miniatura; 

8. Crear una clase de ayuda

Para evitar tener que lidiar con la API de datos de YouTube directamente en nuestra Actividad, crear una nueva clase de Java y nombrarla YoutubeConnector.java. Esta clase tiene las siguientes variables miembro:

  • una instancia de la Youtube Clase que se utilizará para comunicarse con la API de YouTube.
  • una instancia de YouTube.Search.List para representar una consulta de búsqueda
  • La clave API de YouTube como estática Cuerda

Inicializamos las variables anteriores en el constructor. Para inicializar la instancia de Youtube, la YouTube.Builder La clase tiene que ser usada. Las clases que serán responsables de la conexión de red y el procesamiento de JSON se pasan al constructor.

Una vez inicializado, su buscar método se utiliza para crear una solicitud de búsqueda. los lista El método se utiliza para mencionar los detalles que queremos en los resultados de búsqueda. Para este tutorial, vamos a necesitar un carné de identidad y retazo para cada resultado de búsqueda De ellos, extraemos los siguientes campos:

  • id / videoId
  • fragmento / título
  • fragmento / descripción
  • fragmento / miniaturas / predeterminado / url

La clave API del desarrollador debe enviarse con cada solicitud de búsqueda. los setKey El método se utiliza para este propósito. También utilizamos el setType Método para restringir los resultados de búsqueda a videos solamente. En este punto, la clase debería verse así:

paquete com.hathi.simpleplayer; público clase YoutubeConnector YouTube privado youtube; consulta privada de YouTube.Search.List; // Su clave de desarrollador va aquí pública estática final String KEY = "AIzaSQZZQWQQWMGziK9H_qRxz8g-V6eDL3QW_Us"; public YoutubeConnector (contexto de contexto) youtube = new YouTube.Builder (new NetHttpTransport (), nuevo JacksonFactory (), nuevo HttpRequestInitializer () @Override public void initialize (HttpRequest hr) emite IOException ). (R.string.app_name)). Build (); intente query = youtube.search (). list ("id, snippet"); query.setKey (KEY); query.setType ("video"); query.setFields ("elementos (id / videoId, snippet / title, snippet / description, snippet / thumbnails / default / url)");  catch (IOException e) Log.d ("YC", "No se pudo inicializar:" + e); 

A continuación, creamos un método llamado buscar Para realizar la búsqueda en función de las palabras clave del usuario. Este método acepta las palabras clave como Cuerda parámetro. los consulta variable setQ método se utiliza para establecer las palabras clave.

Luego ejecutamos la consulta utilizando su ejecutar método. Los resultados se devuelven en forma de SearchListResponse ejemplo. Recorremos los elementos del resultado y creamos un nuevo Lista de VideoItem Objetos, que será el valor de retorno de este método. Después de agregar el manejo apropiado de errores, buscar El método debería verse así:

Lista pública búsqueda (palabras clave de cadena) query.setQ (palabras clave); intente SearchListResponse response = query.execute (); Lista results = response.getItems (); Lista items = new ArrayList(); para (Resultado de SearchResult: resultados) Elemento de VideoItem = nuevo 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);  devolver los artículos;  catch (IOException e) Log.d ("YC", "No se pudo buscar:" + e); retorno nulo  

9. Crear SearchActivity

Crear una nueva clase llamada SearchActivity.java. Esta clase tiene campos que representan las vistas que mencionamos en activity_search.xml. También tiene un Entrenador de animales para hacer actualizaciones en el hilo de la interfaz de usuario.

En el onCreate Método, inicializamos las vistas y agregamos un OnEditorActionListener al Editar texto para saber cuándo el usuario ha terminado de introducir palabras clave.

La clase pública SearchActivity extiende la actividad private EditText searchInput; Videos de ListView privados Encontrados; manejador privado; @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 = new Handler (); searchInput.setOnEditorActionListener (nuevo TextView.OnEditorActionListener () @Override public boolean onEditorAction (TextView v, int actionId, KeyEventación) devuelve falso; devuelve verdadero;);  

Debes haber notado la llamada al busqueda en youtube método. Vamos a definir el método ahora. En este método, creamos un nuevo Hilo para inicializar un YoutubeConnector instancia y ejecute su buscar método. Es necesario un nuevo hilo, porque las operaciones de red no se pueden realizar en el hilo principal de la interfaz de usuario. Si olvida hacer esto, se enfrentará a una excepción de tiempo de ejecución. Una vez que los resultados están disponibles, el entrenador de animales Se utiliza para actualizar la interfaz de usuario..

Lista privada Resultados de la búsqueda; private void searchOnYoutube (palabras clave de la cadena final) new Thread () public void run () YoutubeConnector yc = new YoutubeConnector (SearchActivity.this); searchResults = yc.search (palabras clave); handler.post (new Runnable () public void run () updateVideosFound (););  .comienzo(); 

En el updateVideosFound Método, generamos un ArrayAdapter y pasarlo a la Vista de la lista para mostrar los resultados de la búsqueda. En el getView Método del adaptador, inflamos el video_item.xml Diseño y actualización de sus vistas para mostrar información sobre el resultado de la búsqueda..

La biblioteca de Picasso. carga Este método se utiliza para recuperar la miniatura del video y dentro método se utiliza para pasarlo a la ImageView.

private void updateVideosFound () ArrayAdapter adaptador = nuevo ArrayAdapter(getApplicationContext (), R.layout.video_item, searchResults) @Override public View getView (int position, View convertView, ViewGroup parent) if (convertView == null) convertView = getLayoutInflater (). inflate (R.layout. video_item, padre, falso);  ImageView thumbnail = (ImageView) convertView.findViewById (R.id.video_thumbnail); Título de TextView = (TextView) convertView.findViewById (R.id.video_title); TextView description = (TextView) convertView.findViewById (R.id.video_description); VideoItem searchResult = searchResults.get (posición); Picasso.with (getApplicationContext ()). Load (searchResult.getThumbnailURL ()). En (miniatura); title.setText (searchResult.getTitle ()); description.setText (searchResult.getDescription ()); volver convertView; ; videosFound.setAdapter (adaptador);  

Por último, necesitamos un método que establezca la OnItemClickListener del Vista de la lista para que el usuario pueda hacer clic en un resultado de búsqueda y ver el video correspondiente. Llamemos a este método addClickListener y llámalo al final de la onCreate método.

Cuando se toca un elemento de la lista, creamos un nuevo Intención Para el JugadorActividad Y pasar en la identificación del video. Una vez el Intención se crea, el startActivity método se utiliza para lanzar el JugadorActividad.

void privado addClickListener () videosFound.setOnItemClickListener (nuevo AdapterView.OnItemClickListener () @Override public void onItemClick (AdapterView av, View v, int pos, id largo) Intent intent = new Intent (getApplicationContext (), PlayerActivity.class); intent.putExtra ("VIDEO_ID", searchResults.get (pos) .getId ()); startActivity (intención); ); 

10. Crear JugadorActividad

Crear una nueva clase de Java llamada PlayerActivity.java que hereda de YouTubeBaseActivity. Esto es importante, porque solo las subclases de YouTubeBaseActivity puede hacer uso de la YouTubePlayerView.

Esta clase tiene una variable miembro única que representa el YouTubePlayerView mencionamos en el activity_player.xml archivo de diseño. Esto se inicializa en el onCreate método invocando el método de inicialización de la YouTubePlayerView clase, pasando en la clave API del desarrollador.

A continuación, nuestra clase necesita implementar el OnInitializedListener Interfaz para saber cuándo se ha completado la inicialización. La interfaz tiene dos métodos, llamados onInitializationFailure y onInitializationSuccess.

En caso de éxito, el cuevideo Método se utiliza para mostrar el video de YouTube. En caso de fallo, un tostada Se muestra que le dice al usuario que la inicialización falló..

Esto es lo que el JugadorActividad la clase debe verse como

La clase pública PlayerActivity extiende YouTubeBaseActivity implementa OnInitializedListener private YouTubePlayerView playerView; @ Overcride Void protegido onCreate (paquete de paquete) super.onCreate (paquete); setContentView (R.layout.activity_player); playerView = (YouTubePlayerView) findViewById (R.id.player_view); playerView.initialize (YoutubeConnector.KEY, esto);  @Override public void onInitializationFailure (Proveedor proveedor, resultado de YouTubeInitializationResult) Toast.makeText (this, getString (R.string.failed), Toast.LENGTH_LONG) .show ();  @ Anular el vacío público enInitializationSuccess (Proveedor, reproductor de YouTubePlayer, booleano restaurado) si (! Restaurado) player.cueVideo (getIntent (). GetStringExtra ("VIDEO_ID"));  

11. compilar y ejecutar

Nuestro cliente de YouTube ahora está listo para ser implementado en un dispositivo Android. Casi todos los dispositivos Android populares lo tienen instalado, pero asegúrese de que la aplicación de YouTube esté instalada y actualizada en el dispositivo, ya que nuestra aplicación depende de ello..

Una vez implementado, deberías poder escribir una consulta para buscar videos en YouTube y luego hacer clic en un resultado para comenzar a reproducir el video correspondiente.

Conclusión

Ahora sabes cómo incrustar videos de YouTube en tu aplicación de Android. También aprendió a usar la biblioteca cliente de la API de Google e interactuar con YouTube. El Android Player API ofrece muchos métodos para controlar la reproducción de los videos y puedes usarlos para crear aplicaciones muy creativas. Consulte la guía de referencia completa para obtener más información sobre la API.