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.
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..
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.
Necesitará las siguientes bibliotecas para este proyecto:
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:
Por último, para añadir Picasso, copia. picasso-2.4.0.jar al libs carpeta de tu proyecto.
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:
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
SearchActivity
SearchActivity
Necesita las siguientes vistas:
Editar texto
: para permitir que el usuario escriba las palabras clave de búsquedaVista de la lista
: para mostrar los resultados de búsquedaLinearLayout
: esta vista sirve como vista principal de las vistas mencionadas anteriormenteCrear un nuevo archivo llamado layout / activity_search.xml y añádele el siguiente código:
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 videoVista 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 vistasCrea un archivo llamado layout / video_item.xml y añádele el siguiente código:
JugadorActividad
JugadorActividad
Necesita las siguientes vistas:
YouTubePlayerView
: para reproducir videos de YouTubeLinearLayout
: esta vista es la vista padre de YouTubePlayerView
Crear un nuevo archivo llamado layout / activity_player.xml y añádele el siguiente código:
VideoItem
Crear una nueva clase de Java llamada VideoItem.java. Utilizamos esta clase para almacenar la siguiente información sobre un video de YouTube:
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;
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:
Youtube
Clase que se utilizará para comunicarse con la API de YouTube.YouTube.Search.List
para representar una consulta de búsquedaCuerda
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úblicabú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
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 privadaResultados 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 () ArrayAdapteradaptador = 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); );
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"));
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.
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.