Освой Android играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

YouTube Android Player API

Запускаем приложение YouTube через намерение

YouTube

Статья писалась в мае 2013 года, когда версия API была 1.0 и считалась экспериментальной. Прошло уже много времени, а версия практически не изменилась - 1.2.2. Похоже, этот проект заброшен. Я оставляю материал, но не уверен в его актуальности. Тем более, что в то время использовался Eclipse. Целая эпоха прошла с того времени. Формально классы и методы не считаются устаревшими.

Как известно, самые распространённые ролики - это видео с котиками. Поэтому, вам определённо нужно изучить эту тему.

Использование YouTube Android Player API позволяет вам использовать методы для загрузки и проигрывания видеороликов и плейлистов, а также управлять видео в нужном режиме.

Просмотр видео осуществляется в отдельном компоненте, который вы можете вставить в свою разметку. Вы можете программно управлять состоянием плеера: воспроизведение, пауза, поиск нужного места и т.п. Также можно использовать фрагменты.

Вдобавок возможен просмотр в полноэкранном режиме, поддерживается смена ориентации и другие возможности.

Запускаем приложение YouTube через намерение

Прежде чем мы начнём использовать YouTube API, рассмотрим сначала пример запуска приложения YouTube на устройстве через намерение. Так как на эмуляторе этого приложения нет, то проверять на реальном устройстве.

Существуют для намерения для запуска конкретного видеоролика или плейлиста, которые можно создать при помощи методов класса com.google.android.youtube.player.YouTubeIntents:

  • createPlayVideoIntent (Context context, String videoId) - создаёт намерение для запуска видео по заданному идентификатору
  • createOpenPlaylistIntent (Context context, String playlistId) - создаёт намерение, открывающее плейлист в приложении YouTube

Добавим на экран кнопку для запуска намерения:


import com.google.android.youtube.player.YouTubeIntents;

// переменная на уровне класса
private static final String VIDEO_ID = "LDLCJeYeiPw";

// Нажатие на кнопку
public void onClick(View view) {
	Intent intentStartYoutube = YouTubeIntents.createPlayVideoIntent(
			getApplicationContext(), VIDEO_ID);
	// Запускаем приложение YouTube с указанным видеороликом		
	startActivity(intentStartYoutube);
}

YouTube API

Теперь перейдём к примерам с использованием YouTube API. Для начала нужно скачать библиотеку YouTubeAndroidPlayerApi-1.2.2.zip. Архив с библиотекой содержит также готовый пример для демонстрации возможностей YouTube Android Player API. На данный момент у библиотеки версия 1.2.2.

Далее необходимо зарегистрироваться в Google APIs console, чтобы получить специальный ключ, который будет использоваться в вашем приложении. Если вы использовали в проектах новую версию Карт Google, то данная операция будет вам знакома.

Сначала создаётся новый проект через кнопку Create project:

Create project

Если вы уже создавали ранее проект, то выбираете ссылку Create...:

Create

У вас откроется панель доступных сервисов. Найдите сервис YouTube Data API v3 и переключите его в состояние ON. (Перед этим вам предложат почитать лицензионное соглашение).

Щёлкните ссылку API Access в навигационном меню:

API Access

В консоли будет отображён ваш ключ разработчика по умолчанию для использования в браузерах.

Щёлкните кнопку Create new Android key.

В текстовом поле нужно ввести отпечаток сертификата SHA-1, используемый вашим Android-приложением.

Стоит отметить, что если вы не введёте никакой информации в это поле, то созданный ключ подойдёт для приложения и вы вполне можете использовать его в тестовых примерах. Позже вы всегда можете вернуться в консоль и получить настоящий ключ для конкретного приложения, который вы будете распространять в Google Play.

Итак, консоль покажет вам ваш ключ Android API:

Распакуйте архив YouTubeAndroidPlayerApi-1.0.0.zip, который вы скачали ранее.

Создайте новый проект для примера, который входит в состав архива. Для этого выберите в меню File | New | Project.

Выберите в Select a wizard Android | Android Project from Existing Code.

Импортируйте проект, выбрав нужную папку, в которую вы распаковали пример.

После успешного импорта в Eclipse у вас будет готовый пример для изучения. Вам необходимо добавить в проект библиотеку YouTubeAndroidPlayerApi.jar в вашу папку <project_root>/libs.

Откройте файл DeveloperKey.java в пакете YouTubeAndroidAPIDemo (YouTubeAndroidAPIDemo/src/com/examples/youtubeapidemo/DeveloperKey.java) и замените null вашим ключом разработчика, который вы получили ранее в консоли:

public static final String DEVELOPER_KEY = null;

Если вы этого не сделаете, то программа завершится с ошибкой java.lang.NullPointerException.

Запускайте приложение на устройстве (на эмуляторе работать не будет).

Создание своего примера

Учебная программа - это, конечно, замечательно. Но хочется научиться создавать свои приложения. Давайте попробуем с нуля. Запускаем Eclipse и создаём новый проект YoutubeDemo.

Скопируйте файл YouTubeAndroidPlayerApi.jar в папку libs вашего проекта.

В Eclipse делаем правый щелчок на файле YouTubeAndroidPlayerApi.jar и выбираем Build Path | Add to build path.

Добавляем компонент YouTube Video Player View в разметку активности.


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/textView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#C0C0C0"
        android:text="Введите Video ID:"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <EditText
        android:id="@+id/editUrl"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Введите Video ID"
        android:singleLine="true"
        android:text="vL8sp4VAOnU" >
    </EditText>

    <Button
        android:id="@+id/buttonLoad"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="onClick"
        android:text="Загрузить" />

    <com.google.android.youtube.player.YouTubePlayerView
        android:id="@+id/youtubeplayer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </com.google.android.youtube.player.YouTubePlayerView>

</LinearLayout>

Переходим к классу активности. Прежде всего нужно запомнить, что вместо стандартного extends Activity нужно наследоваться от YouTubeBaseActivity.

Также нужно импортировать следующие классы:


import com.google.android.youtube.player.YouTubeInitializationResult;
import com.google.android.youtube.player.YouTubePlayer;
import com.google.android.youtube.player.YouTubePlayer.Provider;
import com.google.android.youtube.player.YouTubePlayerView;

Код полностью:


package ru.alexanderklimov.youtubedemo;

import com.google.android.youtube.player.YouTubeBaseActivity;
import com.google.android.youtube.player.YouTubeInitializationResult;
import com.google.android.youtube.player.YouTubePlayer;
import com.google.android.youtube.player.YouTubePlayer.Provider;
import com.google.android.youtube.player.YouTubePlayerView;

import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class YouTubeActivity extends YouTubeBaseActivity implements
		YouTubePlayer.OnInitializedListener {

	private YouTubePlayerView playerview;
	private YouTubePlayer youtubeplayer;
	private EditText editVideoID;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		setContentView(R.layout.activity_youtube);

		playerview = (YouTubePlayerView) findViewById(R.id.youtubeplayer);
		editVideoID = (EditText) findViewById(R.id.editUrl);
		playerview.initialize("ваш_ключик", this);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.activity_youtube, menu);
		return true;
	}

	@Override
	public void onInitializationFailure(Provider arg0,
			YouTubeInitializationResult arg1) {
		Toast.makeText(this, "Ошибка при инициализации", Toast.LENGTH_LONG)
				.show();
	}

	public void onInitializationSuccess(YouTubePlayer.Provider provider,
			YouTubePlayer player, boolean wasRestored) {
		youtubeplayer = player;
		if (!wasRestored) {
			Toast.makeText(this, "Инициализация прошла успешно",
					Toast.LENGTH_LONG).show();
			player.cueVideo("vL8sp4VAOnU");
		}
	}

	protected YouTubePlayer.Provider getYouTubePlayerProvider() {
		return (YouTubePlayerView) findViewById(R.id.youtubeplayer);
	}

	public void onClick(View v) {
		// youtubeplayer.cueVideo(editVideoID.getText().toString());
		youtubeplayer.cueVideo(editVideoID.getText().toString());
	}
}

Общие комментарии к коду:

  • Реализуйте интерфейс YouTubePlayer.OnInitializedListener.
  • Вызовите метод инициализации с использованием ключа API.
  • Загрузите видео при помощи метода YouTubePlayer.loadVideo(video id).

Не забываем про разрешение на интернет в манифесте.

Идентификатором видео на YouTube является набор символов после v=:

https://www.youtube.com/watch?v=fhWaJi1Hsfo

Встретилась проблема, которую я так и не смог решить. Первоначально у меня использовался RelativeLayout, который стоит по умолчанию при создании нового проекта. Почему-то при такой разметке видео отказывалось проигрываться. Оно начинает загружаться, выводит превьюшку, проигрывает одну-две секунды и останавливается. Если переключиться в полноэкранный режим, то видео воспроизводится без проблем. Надо почитать документацию, может там найдётся объяснение. Если вы разберётесь, то дайте знать, пожалуйста.

Удачного просмотра видео про котиков!

Общая страница для знакомства YouTube Android Player API

Страница документации по YouTube Android Player API

Готовое приложение Готовое приложение

Альтернативные варианты

Использовать официальный YouTube API не слишком удобно - получать ключ, разбираться в документации... Можно попробовать другие варианты. Например, есть сторонняя библиотека.


implementation 'com.pierfrancescosoffritti.androidyoutubeplayer:core:10.0.3'

Ключ не требуется, но некоторые жалуются, что Гугл удаляла приложение за использование этой библиотеки.

Самый простой вариант - использовать WebView.


@SuppressLint("SetJavaScriptEnabled")
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_web_view)

        webView.settings.javaScriptEnabled = true
        webView.loadUrl("https://www.youtube.com/embed/fhWaJi1Hsfo")
    }
}
Реклама