Как сделать свой плеер для андроид

Создание музыкального проигрывателя на Android: настройка проекта

Russian (Pусский) translation by Yuri Yuriev (you can also view the original English article)

Платформа Android предоставляет ресурсы для управления воспроизведением мультимедиа, которые ваши приложения могут использовать для создания интерфейса между пользователем и его музыкальными файлами. В этой серии уроков мы создадим базовый музыкальный плеер для Android. Приложение представит список песен на устройстве, чтобы пользователь мог выбирать их для воспроизведения. Приложение будет управлять воспроизведением и продолжит исполнение, когда пользователь выйдет из приложения, при этом будет отображаться уведомление.

Введение

Для создания music player потребуется класс ContentResolver для извлечения треков на устройстве, класс MediaPlayer для воспроизведения звука и класс MediaController для управления воспроизведением. Мы также будем использовать Service для воспроизведения звука, когда пользователь не взаимодействует напрямую с приложением. Дальше можете не смотреть, если вы промежуточный разработчик Android, и, если уже создали несколько приложений, вам будет неинтересно. Вот предварительный вид готового приложения:

В этом уроке мы создадим приложение и запросим пользовательское устройство для аудиофайлов с использованием классов ContentResolver и Cursor . В следующей части мы будем использовать образец Adapter для показа песен в виде списка, начала воспроизведения при выборе элемента из списка. В последнем выпуске серии мы используем класс MediaController , чтобы дать пользователю контроль над воспроизведением, реализовать функции перемотки вперёд и назад и включить функцию shuffle. По окончании серии мы рассмотрим другие аспекты воспроизведения media, которые могут улучшить приложение, такие как обработка фокуса аудио, представление медиафайлов в разных видах и воспроизведение потокового media .

1. Создание и настройка нового проекта

Шаг 1

Создайте новый проект Android. Если вы используете Eclipse, то пусть IDE (Integrated Development Environment) создаст для вас основной класс Activity и файл макета. Для некоторых кодов, которые мы используем в этой серии, понадобится минимальный уровень API 16, так что вам нужно будет сделать дополнительные шаги для поддержки более старых версий. Когда проект будет создан, откройте файл Manifest проекта. Внутри элемента manifest добавьте следующее разрешение:

Мы сделаем это разрешение, чтобы воспроизведение музыки продолжалось, когда устройство не работает. В вашем Manifest должен быть элемент для основного класса Activity . Добавьте следующие атрибуты в элемент activity , чтобы установить screenOrientation и launchMode :

Для простоты мы будем придерживаться книжной ориентации. launchMode поможет процессу перехода к приложению после его удаления. Мы отобразим уведомление о текущей песне, нажатие на уведомление вернёт пользователя в приложение. Мы также будем использовать класс Service для воспроизведения музыки. Добавьте следующую строку в Manifest проекта внутри элемента application и после элемента activity :

Измените имя пакета, как хотите и измените имя класса, если хотите.

Шаг 2

Откройте основной файл layout проекта и замените его на следующий layout:

Обязательно измените атрибут tools:context, если ваш основной класс Activity называется по-другому. Макет включает ListView , в котором мы представим список песен.

Читайте также:  Мобильный эквайринг сбербанк для андроид

Мы собираемся включить два пункта меню для переключения функции перемешивания и выхода из приложения. Откройте файл главного меню (res/menu/main.xml) и замените его содержимое следующим:

Если нравится, вы можете хранить строки заголовка в файле res/values/strings.xml. Эти два элемента относятся к drawable файлам. Создайте собственные или используйте эти два изображения для начала:


Мы будем использовать и значок уведомления о воспроизведении. Создайте его или используйте следующий:

Код будет ссылаться на изображения, используя имена rand, end и play, поэтому убедитесь, что вы используете одни и те же имена файлов. Скопируйте изображения в папку (-и) drawables вашего проекта. Мы будем реализовывать эти действия позже.

2. Запрос устройства для песен

Шаг 1

Попробуем запросить устройство пользователя для аудиофайлов. Во-первых, добавьте новый класс Song . Мы будем использовать этот класс для моделирования данных одного звукового файла. В объявлении класса добавьте три переменные экземпляра данных, которые мы сохраним для каждого трека:

Затем добавьте метод конструктора, в котором мы создаём экземпляры переменных:

Наконец, добавьте методы get для переменных экземпляра:

Если вы планируете использовать больше информации о треке, вы можете добавить дополнительные переменные экземпляра в класс.

Шаг 2

Откройте основной класс Activity и добавьте imports:

Объявите следующие переменные экземпляра перед методом onCreate :

Мы будем хранить песни в списке и отображать их в экземпляре ListView в главном layout. В onCreate после установки вида содержимого извлеките экземпляр ListView , используя ID, который мы дали ему в главном макете:

Создайте список, как показано ниже:

Затем в объявлении основного класса Activity после существующих методов создайте вспомогательный метод для извлечения информации о звуковом файле:

Внутри этого метода создайте экземпляр ContentResolver , извлеките URI для внешних музыкальных файлов и создайте экземпляр Cursor , используя экземпляр ContentResolver для запроса музыкальных файлов:

Теперь мы можем перебрать результаты, сначала проверив, что у нас достоверные данные:

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

Вернитесь в onCreate после кода, который мы добавили, вызовите этот новый метод:

3. Отображение композиций

Шаг 1

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

Мы используем переменную title в классе Song , используя добавленные методы get, чтобы реализовать метод compare , сортируя песни по заголовкам.

Шаг 2

Определим layout для представления каждой песни в списке. Добавьте новый файл в папку res/layout вашего проекта, назвав его song.xml и введя следующее:

Не стесняйтесь изменять layout по своему вкусу. Каждая песня в списке будет представлена строками названия и артиста, поэтому мы будем использовать TextViews для отображения этих данных. Обратите внимание: в теге открытия LinearLayout указан атрибут onClick . Мы будем использовать этот метод в основном классе Activity , чтобы реагировать на выбор песни в списке, проигрывая песню, представленную элементом списка, который был выбран.

Шаг 3

Мы будем использовать Adapter для отображения песен в виде списка. Добавьте в приложение новый класс SongAdapter или назовите иначе. При создании класса назначьте ему суперкласс android.widget.BaseAdapter . Eclipse должен вставить следующую схему:

Читайте также:  Лаунчер apple для андроид

Вам нужно будет добавить следующие imports:

В объявлении класса задайте следующие переменные:

Мы передадим список композиций из основного класса Activity и используем LayoutInflater для сопоставления строк заголовка и исполнителя с TextViews в созданном нами layout песни.

После переменных экземпляра придайте адаптеру метод конструктора для их создания:

Измените содержимое метода getCount , чтобы вернуть размер списка:

Вы можете оставить методы getItem и getItemId нетронутыми. Обновите реализацию метода getView , как показано ниже:

Мы устанавливаем текст названия и исполнителя, выбирая правильный экземпляр Song из списка, используя индекс позиции, сопоставляя эти строки с представлениями, добавленными в файл макета песни. Мы также устанавливаем позицию в качестве тега вида, которая позволит нам играть правильную песню, когда пользователь нажимает на элемент в списке. Помните, что файл формата song.xml включал атрибут onClick . Мы будем использовать метод, указанный там, чтобы получить тег в Activity .

Шаг 3

Вернувшись в основной класс Activity , в методе onCreate после сортировки списка создайте новый экземпляр класса Adapter и установите его в ListView :

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

Заключение

Теперь мы настроили приложение для чтения песен с пользовательского устройства. В следующей части мы начнем воспроизведение, когда пользователь выберет песню, используя класс MediaPlayer . Мы реализуем воспроизведение с использованием класса Service , чтобы оно продолжалось, пока пользователь занят другими приложениями. Наконец, мы будем использовать класс MediaController , чтобы дать пользователю управлять воспроизведением.

Источник

Android. Пишем свой AudioPlayer

Давненько не было чего-то новенького, вот я и решил немного порадовать своих читателей новым екзамплом в виде AudioPlayer-а.

Вот что у меня получилось:

Предлагаю начать реализацию данного чудо приложения 🙂

Шаг 1.

Начинаем как всегда с визуального интерфейса.

Обратите внимание, что в нашей кнопке уже проставлен параметр android:onClick, который и будет проигрывать и останавливать музыку.

Шаг 2.

Дальше зайдем в папку res/values/strings.xml и добавим следующие строки:

Шаг 3.

Теперь нам нужно добавить в ресурсы ту песенку, которую вы хотите проигрывать.

Я люблю слушать группу Imagine Dragons, а именно Imagine Dragons – Radioactive, просто суперская песня.

Так вот, добавляем песенку в res/raw/imagine_dragons_radioactive.mp3.

У вас скорее всего не будет директории raw/, по этому вы смело можете её создать вручную в директории res/, и также обратите внимание на то как я переименовал песню imagine_dragons_radioactive.mp3. В её названии должны быть только маленькие буквы английского алфавита, а также допускаются символы подчеркивания и точка.

Шаг 4.

Перейдем непосредственно к коду, а точней к нашему Activity:

Я определил три приватные переменные, две из которых являются компонентами визуального интерфейса, а третья – это класс MediaPlayer, который обеспечит возможность манипуляции медиафайлами.

В onCreate-е вызывается метод initViews():

тут мы определяем кнопку и скролл, а также нашу песню с ресурсов в MediaPlayer.

Вешаем обработчик на перемотку песни.

И обработчик на Play и Stop :

Читайте также:  Kies не обновляет андроид

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

Источник

Разработка видеоплеера для Android

This post is also available in: Английский


Одна из задач, с которой вы можете столкнуться http://kakielekarstva.ru/ при разработке приложения для Android — это встраивание видео плеера в приложение, для воспроизведения видео контента. Стандартный SDK предоставляет два пути решения этой проблемы: использовать низкоуровневый класс MediaPlayer или готовый визуальный компонент VideoView совместно со стандартной панелью управления воспроизведением MediaController. Оба эти подхода обладают своими недостатками, поэтому мы решили разработать собственный видеокомпонент AVideo. В этой статье мы расскажем о том как его использовать в своем приложении и какие преимущества он дает.

Сначала немного о недостатках стандартных классов. Класс MediaPlayer в силу своей низкоуровневости обладает максимальными возможностями, но весьма сложен в использовании, поэтому его не рекомендуется использовать напрямую. Специально для того, чтобы спрятать от разработчика всю сложность MediaPlayer, в SDK входит класс VideoView. Простейшая программа, использующая VideoView и MediaController выглядит примерно так:

Но класс VideoView подходит только для простейших применений. Если вы захотите добавить в него какую-либо новую функциональность или даже просто сменить оформление элементов панели управления, то сделать это будет не просто, поскольку в SDK не предусмотрено такой возможности. Разработчику остается только реализовать собственный компонент на основе MediaPlayer с нуля или вырезать из находящихся в открытом доступе исходных кодов Android нужные компоненты и внести в них необходимые изменения. Именно так мы и решили поступить при разработке собственного плеера AVideo. В результате получился набор видео классов, совместимых по интерфейсу со стандартными, но реализующий дополнительно следующую функциональность:

  • Измененное оформление элементов панели управления воспроизведением видео.
  • Управление уровнем звука и кнопка выключения звука.
  • Управление уровнем яркости подсветки экрана.
  • Корректная работа компонента и контролов при встраивании в сложный layout, когда видео занимает только часть экрана.
  • Переключение между обычным режимом отображения в layout-е и полноэкранным режимом по двойному нажатию на плеер с изменением размера элементов панели управления.
  • Остановка воспроизведения и восстановление воспроизведения с запомненной позиции при отключении экрана устройства и при выходе из приложения.

Использовать наши видео компоненты в собственном приложении очень просто. Загрузите архив, содержащий код компонентов и пример использования, с сайта github.com. Импортируйте проекты из архива в рабочую область Eclipse и подключите их к своему приложению как библиотеки (Свойства проекта, Android, Library, Add…). Код простейшего видеоплеера с использованием этих компонентов получится абсолютно такой же, как если бы вы использовали стандартные компоненты, единственное, что изменится — это строки импорта соответствующих классов и к названию компонента VideoView в файле layout-а добавится наш package

. Пример простейшего layout-а будет выглядеть так:

Кроме того, для корректного восстановления позиции воспроизведения при выходе из приложения или при повороте экрана, рекомендуется также добавить свойство

к вашей activity и следующий Java-код:

Результат работы тестового приложения в обычном и в полноэкранном режиме вы можете видеть на скриншотах:

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

Источник

Оцените статью