Как добавить звук в приложение android
Подробный разбор полезных функций и настроек вашего смартфона продолжается и сегодня речь пойдет о настройках звука, которые вы можете найти в меню «Для разработчиков».
В прошлой статье (ссылку на которую найдёте ниже) я показал несколько пунктов, которые я рекомендую отключать, а так же подробно остановился на настройке «Буфера журнала», если ещё не читали, то рекомендую ознакомиться после прочтения этой публикации.
Ну что же, без лишних слов приступаем к подробному обзору и первым пунктом, смысл которого я бы хотел объяснить, станет:
Отключить абсолютный уровень громкости Bluetooth
Основным назначением этой настройки является недопущение перегрузки подключённых по Bluetooth наушников и колонок. Если активировать этот переключатель, устройству будет запрещено выходить на максимальную мощность.
Именно поэтому если в ваших беспроводных наушниках, при подключении к смартфону, звук становиться сильно тише привычного уровня, я рекомендую отключить абсолютный уровень.
Отключить аппаратную разгрузку профиля
Этот пункт, как правило не требует вмешательства пользователя смартфона, но в очень редких случаях, при отсутствии звука в Bluetooth наушниках, его нужно включить в настройках. Если же у вас всё работает, никаких действий производить не нужно.
Версия Bluetooth AVRCP
Настройка поддерживается на смартфонах с Android 8.0 и выше, и отвечает за взаимодействие между двумя устройствами (наушники и телефон).
Скорее всего на вашем смартфоне выставлено значение «AVRCP 1.4» (по умолчанию), но я рекомендую выбрать «AVRCP 1.5», так как в этой версии сохранены все возможности 1.4, но она лучше оптимизирована и на некоторых смартфонах может оказать положительное влияние на скорость отклика на различные команды, по типу: Переключение треков, повышение/уменьшение громкости, вызов голосового ассистента и так далее.
Версия Bluetooth MAP
Аудиокодек для передачи через Bluetooth
Для того чтобы вносить изменения в это меню, вам нужно знать какие кодеки поддерживаются вашими наушниками или колонкой. Самыми распространёнными являются AAC и SBC, а лучшими по качеству передаваемого звука (из доступных) LDAC и Qualcomm aptX HD Audio.
Подчёркиваю, если ваши наушники работают только с SBC, от того что вы выберете тот же LDAC, качество не улучшится, это важно понимать.
Частота дискретизации при передаче через Bluetooth
Чем больше, тем лучше, но чем лучше, тем больше ресурсов на передачу и кодирование расходует смартфон. Как и предыдущий пункт должен поддерживаться не только смартфоном, но и Bluetooth устройством, иначе настройка будет сброшена до стандартного значения (44.1 кГц). Оптимальной принято считать 48.0 кГц.
Последующие пункты настраиваются только если наушники подключённые к смартфону поддерживают LDAC и aptxHD. Но при редактировании помните, что при выборе максимального качества звука, радиус приёма сигнала может сильно сократиться.
С настройками звука закончили, если вам интересно почитать про настройки графики, напишите об этом ниже и в ближайшее время я создам подробную инструкцию.
По умолчанию уведомления от разных приложений Android приходят с одним и тем же выбранным по умолчанию звуком. Исключение составляют редкие приложения, где собственный звук уведомления установили разработчики. Это не всегда удобно, а возможность уже по звуку определять вайбер это, инстаграм, почта или SMS, может быть полезным.
В этой инструкции подробно о том, как настроить разные звуки уведомлений для различных приложений на Android: сначала на новых версиях (8 Oreo и 9 Pie и Android 10), где эта функция присутствует в системе, затем — на Android 6 и 7, где по умолчанию такой функции не предусмотрено. Также может быть полезным: Как изменить или поставить свой рингтон на Android.
Примечание: звук для всех уведомлений можно изменить в Настройки — Звук — Мелодия уведомления, Настройки — Звуки и вибрация — Звуки уведомлений или в аналогичных пунктах (зависит от конкретного телефона, но везде примерно одинаково). Для того, чтобы добавить собственные звуки уведомлений в список, просто скопируйте файлы мелодий в папку Notifications во внутренней памяти вашего смартфона.
Изменение звука уведомления отдельных приложений Android 9 и 8
В последних версиях Android присутствует встроенная возможность устанавливать разные звуки уведомлений для разных приложений.
Настройка выполняется очень просто. Далее скриншоты и пути в настройках приведены для Samsung Galaxy Note с Android 9 Pie, но и на «чистой» системе все необходимые шаги почти в точности совпадают.
- Зайдите в Настройки — Уведомления.
- Внизу экрана вы увидите список приложений, отправляющих уведомления. Если отображаются не все приложения, нажмите по кнопке «Просмотреть все».
- Нажмите по приложению, звук уведомления которого нужно изменить.
- На экране будут показаны разные типы уведомлений, которые может отправлять это приложение. Например, на скриншоте ниже мы видим параметры приложения Gmail. Если нам нужно изменить звук уведомлений для входящей почты на указанный почтовый ящик, нажимаем по пункту «Почта. Со звуком».
- В пункте «Со звуком» выбираем нужный звук для выбранного уведомления.
Аналогичным образом вы можете поменять звуки уведомлений для различных приложений и для разных событий в них или, наоборот, отключить такие уведомления.
Отмечу, что существуют приложения, для которых такие настройки недоступны. Из тех, что встретились лично мне — только Hangouts, т.е. их не так много и они, как правило, и без того используют собственные звуки уведомлений вместо системных.
Как изменить звуки разных уведомлений на Android 7 и 6
В предыдущих версиях Android нет встроенной функции для установки различных звуков для различных уведомлений. Однако это можно реализовать с помощью сторонних приложений.
В Play Маркет доступно несколько приложений, имеющих такие функции: Light Flow, NotifiCon, Notification Catch App. В моем случае (тестировал на чистом Android 7 Nougat) наиболее простым и работоспособным оказалось последнее приложение (на русском языке, root не требуется, исправно работает при заблокированном экране).
Изменение звука уведомления для приложения в Notification Catch App выглядит следующим образом (при первом использовании придется дать много разрешений, чтобы приложение могло перехватывать системные уведомления):
Если по какой-то причине это приложение у вас не заработало, рекомендую попробовать Light Flow — оно позволяет не только менять звуки уведомлений для разных приложений, но и другие параметры (например, цвет светодиода или скорость его мигания). Единственный недостаток — не весь интерфейс переведен на русский язык.
А вдруг и это будет интересно:
03.03.2019 в 23:13
У меня в этих настройках стоит выбранный мной звук к приложению, но все равно срабатывает звук, который я установила на уведомления! Это я так настройки телефона сбросила( До этого все нормально было
04.03.2019 в 08:49
Здравствуйте. В самом приложении смотрели настройки, в некоторых там приоритет. Например, в телеграме так, важно что именно в нём выбрано для звука уведомлений.
18.03.2019 в 12:33
как это все делается на Honor 9?
18.03.2019 в 17:35
25.05.2019 в 04:05
07.07.2019 в 13:49
на 9 андроиде таких настроек уведомлений нет на телефоне.
может конкретно на вашем такое есть. на моем нет!
28.07.2019 в 06:28
Здравствуйте, на Андроид 8.1 идет сигнал установки приложений. как его убрать? Каждый раз, как начинают в массовом порядке обновляться приложения, эти звуки хором достали и всё по ночам. Телефон Nobby A200.
15.12.2019 в 15:35
16.12.2019 в 09:24
16.02.2020 в 15:53
Приложение Notification Catch App очень корректно работает на Андроиде 6.0 на китайцах. Очень легкая настройка
24.03.2020 в 21:27
Спасибо за помощь. Установила звуки для всех приложений. очень удобно. Теперь знаю, когда немедленно реагировать на сигнал, а когда можно не торопиться.
03.05.2020 в 16:27
Благодарю, именно то, что я искала!
24.06.2020 в 14:33
Здравствуйте. Хорошая информация, но для многих пользователей с Android 10 она бесполезная, потому что при любом способе попытки установить свой звук или мелодию через проводник или переносом файла в папку, появляется информация «НЕПРАВИЛЬНЫЙ ТИП, ВЫБЕРИТЕ СНОВА. Как я понимаю, папка Notification формат MP3 не принимает. Поставить рингтон формата мр3 на звонок мне удалось окольными путями только таким образом: выбрать контакт, зайти в данные контакта, выбрать «изменить» и там появляется возможность установить пользовательский рингтон, пройти через проводник или файлменеджер к папке, где хранится музыка или звуки в формате мр3, и выбрать нужный. Только так, иначе папки со звуками уведомлений и рингтонов Файлы не принимают. Узнать бы в каком аудио формате там находятся все звуки и мелодии, тогда можно было сконвертировать в файл в каком нибудь редакторе в нужный формат до переноса в папку. Подскажите решение. Вы знаете этот формат? Заранее спасибо.
25.06.2020 в 16:16
22.08.2020 в 18:19
23.08.2020 в 08:33
Здравствуйте.
Если честно, точно не знаю, странное для меня поведение. Но если делали через стороннее приложение, а не в настройках телефона, проверьте, что будет, если в настройках просто отключить уведомления для ВК (если есть такая возможность).
14.09.2020 в 12:28
Здравствуйте . Как изменить звук на входящую эл. почту . Телефон Xiaomi Redmi Note 9 pro.
06.12.2020 в 01:21
Здравствуйте. А как быть, если при смене рингтона конкретному приложению он открывает список типов уведомлении, и звук задействован в нескольких?
Т.е. открываю я настройки андроид, выбираю приложение, на котором хочу сменить рингтон, а там десяток типов уведомлений, и в половине есть звук. Руками менять неудобно, особенно если приложение не одно такое, а несколько.
06.12.2020 в 09:58
05.02.2021 в 21:21
АВТОР! Спасибо! Я ВЕСЬ интернет и настройки исшерстила))) уже смирилась присвоить разным прилогам свой звук и тут ваша статья в помощь!
14.03.2021 в 13:45
14.03.2021 в 14:53
Если не ошибаюсь (сейчас не могу посмотреть точное имя папки) нужно положить файл в папку Notifications во внутренней памяти.
06.10.2021 в 14:01
Здравствуйте, помогите! Я как то хотела поставить скачанный звук смс на уведомления, сейчас хочу поставить звук из тех что были в телефоне, системный, но нажимаю чтоб выбрать и даёт выбрать лишь из аудио а системные не показывает
В статье рассматривается архитектура и API для создания приложений, воспроизводящих музыку. Мы напишем простое приложение, которое будет проигрывать небольшой заранее заданный плейлист, но «по-взрослому» — с использованием официально рекомендуемых практик. Мы применим MediaSession и MediaController для организации единой точки доступа к медиаплееру, и MediaBrowserService для поддержки Android Auto. А также оговорим ряд шагов, которые обязательны, если мы не хотим вызвать ненависти пользователя.
В первом приближении задача выглядит просто: в activity создаем MediaPlayer, при нажатии кнопки Play начинаем воспроизведение, а Stop — останавливаем. Все прекрасно работает ровно до тех пор, пока пользователь не выйдет из activity. Очевидным решением будет перенос MediaPlayer в сервис. Однако теперь у нас встают вопросы организации доступа к плееру из UI. Нам придется реализовать binded-сервис, придумать для него API, который позволил бы управлять плеером и получать от него события. Но это только половина дела: никто, кроме нас, не знает API сервиса, соответственно, наша activity будет единственным средством управления. Пользователю придется зайти в приложение и нажать Pause, если он хочет позвонить. В идеале нам нужен унифицированный способ сообщить Android, что наше приложение является плеером, им можно управлять и что в настоящий момент мы играем такой-то трек из такого-то альбома. Чтобы система со своей стороны подсобила нам с UI. В Lollipop (API 21) был представлен такой механизм в виде классов MediaSession и MediaController. Немногим позже в support library появились их близнецы MediaSessionCompat и MediaControllerCompat.
Следует сразу отметить, что MediaSession не имеет отношения к воспроизведению звука, он только об управлении плеером и его метаданными.
MediaSession
Итак, мы создаем экземпляр MediaSession в сервисе, заполняем его сведениями о нашем плеере, его состоянии и отдаем MediaSession.Callback, в котором определены методы onPlay, onPause, onStop, onSkipToNext и прочие. В эти методы мы помещаем код управления MediaPlayer (в примере воспользуемся ExoPlayer). Наша цель, чтобы события и от аппаратных кнопок, и из окна блокировки, и с часов под Android Wear вызывали эти методы.
Полностью рабочий код доступен на GitHub (ветка master). В статьи приводятся только переработанные выдержки из него.
Для доступа извне к MediaSession требуется токен. Для этого научим сервис его отдавать
и пропишем в манифест
MediaController
Теперь реализуем activity с кнопками управления. Создаем экземпляр MediaController и передаем в конструктор полученный из сервиса токен.
MediaController предоставляет как методы управления плеером play, pause, stop, так и коллбэки onPlaybackStateChanged(PlaybackState state) и onMetadataChanged(MediaMetadata metadata). К одному MediaSession могут подключиться несколько MediaController, таким образом можно легко обеспечить консистентность состояний кнопок во всех окнах.
Наша activity работает, но ведь идея исходно была, чтобы из окна блокировки тоже можно было управлять. И тут мы приходим к важному моменту: в API 21 полностью переделали окно блокировки, теперь там отображаются уведомления и кнопки управления плеером надо делать через уведомления. К этому мы вернемся позже, давайте пока рассмотрим старое окно блокировки.
Как только мы вызываем mediaSession.setActive(true), система магическим образом присоединяется без всяких токенов к MediaSession и показывает кнопки управления на фоне картинки из метаданных.
Однако в силу исторических причин события о нажатии кнопок приходят не напрямую в MediaSession, а в виде бродкастов. Соответственно, нам надо еще подписаться на эти бродкасты и перебросить их в MediaSession.
MediaButtonReceiver
Для этого разработчики Android любезно предлагают нам воспользоваться готовым ресивером MediaButtonReceiver.
Добавим его в манифест
MediaButtonReceiver при получении события ищет в приложении сервис, который также принимает "android.intent.action.MEDIA_BUTTON" и перенаправляет его туда. Поэтому добавим аналогичный интент-фильтр в сервис
Если подходящий сервис не найден или их несколько, будет выброшен IllegalStateException.
Теперь в сервис добавим
Метод handleIntent анализирует коды кнопок из intent и вызывает соответствующие коллбэки в mediaSession. Получилось немного плясок с бубном, но зато почти без написания кода.
На системах с API >= 21 система не использует бродкасты для отправки событий нажатия на кнопки и вместо этого напрямую обращается в MediaSession. Однако, если наш MediaSession неактивен (setActive(false)), его пробудят бродкастом. И для того, чтобы этот механизм работал, надо сообщить MediaSession, в какой ресивер отправлять бродкасты.
Добавим в onCreate сервиса
На системах с API < 21 метод setMediaButtonReceiver ничего не делает.
Ок, хорошо. Запускаем, переходим в окно блокировки и… ничего нет. Потому что мы забыли важный момент, без которого ничего не работает, — получение аудиофокуса.
Аудиофокус
Всегда существует вероятность, что несколько приложений захотят одновременно воспроизвести звук. Или поступил входящий звонок и надо срочно остановить музыку. Для решения этих проблем в системный сервис AudioManager включили возможность запроса аудиофокуса. Аудиофокус является правом воспроизводить звук и выдается только одному приложению в каждый момент времени. Если приложению отказали в предоставлении аудиофокуса или забрали его позже, воспроизведение звука необходимо остановить. Как правило фокус всегда предоставляется, то есть когда у приложения нажимают play, все остальные приложения замолкают. Исключение бывает только при активном телефонном разговоре. Технически нас никто не заставляет получать фокус, но мы же не хотим раздражать пользователя? Ну и плюс окно блокировки игнорирует приложения без аудиофокуса.
Фокус необходимо запрашивать в onPlay() и освобождать в onStop().
Получаем AudioManager в onCreate
Запрашиваем фокус в onPlay
И освобождаем в onStop
При запросе фокуса мы отдали коллбэк
Все, теперь окно блокировки на системах с API < 21 работает.
Android 4.4
MIUI 8 (базируется на Android 6, то есть теоретически окно блокировки не должно отображать наш трек, но здесь уже сказывается кастомизация MIUI).
Уведомления
Однако, как ранее упоминалось, начиная с API 21 окно блокировки научилось отображать уведомления. И по этому радостному поводу, вышеописанный механизм был выпилен. Так что теперь давайте еще формировать уведомления. Это не только требование современных систем, но и просто удобно, поскольку пользователю не придется выключать и включать экран, чтобы просто нажать паузу. Заодно применим это уведомление для перевода сервиса в foreground-режим.
Нам не придется рисовать кастомное уведомление, поскольку Android предоставляет специальный стиль для плееров — Notification.MediaStyle.
Добавим в сервис два метода
И добавим вызов refreshNotificationAndForegroundStatus(int playbackState) во все коллбэки MediaSession.
Android 4.4
Android 7.1.1
Android Wear
Started service
В принципе у нас уже все работает, но есть засада: наша activity запускает сервис через binding. Соответственно, после того, как activity отцепится от сервиса, он будет уничтожен и музыка остановится. Поэтому нам надо в onPlay добавить
Никакой обработки в onStartCommand не надо, наша цель не дать системе убить сервис после onUnbind.
А в onStop добавить
В случае, если к сервису привязаны клиенты, stopSelf ничего не делает, только взводит флаг, что после onUnbind сервис можно уничтожить. Так что это вполне безопасно.
ACTION_AUDIO_BECOMING_NOISY
Продолжаем полировать сервис. Допустим пользователь слушает музыку в наушниках и выдергивает их. Если эту ситуацию специально не обработать, звук переключится на динамик телефона и его услышат все окружающие. Было бы хорошо в этом случае встать на паузу.
Для этого в Android есть специальный бродкаст AudioManager.ACTION_AUDIO_BECOMING_NOISY.
Добавим в onPlay
В onPause и onStop
И по факту события встаем на паузу
Android Auto
Если у вас под рукой нет совместимого автомобиля, что, согласитесь, иногда бывает, можно просто запустить приложение и экран самого телефона будет работать в качестве автомобильного.
Исходный код выложен на GitHub (ветка MediaBrowserService).
Прежде всего надо указать в манифесте, что наше приложение совместимо с Android Auto.
Добавим в манифест
Здесь automotive_app_desc — это ссылка на файл automotive_app_desc.xml, который надо создать в папке xml
Преобразуем наш сервис в MediaBrowserService. Его задача, помимо всего ранее сделанного, отдавать токен в Android Auto и предоставлять плейлисты.
Поправим декларацию сервиса в манифесте
Во-первых, теперь наш сервис экспортируется, поскольку к нему будут подсоединяться снаружи.
И, во-вторых, добавлен интент-фильтр android.media.browse.MediaBrowserService.
Меняем родительский класс на MediaBrowserServiceCompat.
Поскольку теперь сервис должен отдавать разные IBinder в зависимости от интента, поправим onBind
Имплементируем два абстрактных метода, возвращающие плейлисты
И, наконец, имплементируем новый коллбэк MediaSession
Здесь mediaId — это тот, который мы отдали в setMediaId в onLoadChildren.
Плейлист
Трек
UPDATE от 27.10.2017: Пример на GitHub переведен на targetSdkVersion=26. Из релевантных теме статьи изменений необходимо отметить следующее:
- android.support.v7.app.NotificationCompat.MediaStyle теперь deprecated. Вместо него следует использовать android.support.v4.media.app.NotificationCompat.MediaStyle. Соответственно, больше нет необходимости использовать android.support.v7.app.NotificationCompat, теперь можно использовать android.support.v4.app.NotificationCompat
- Метод AudioManager.requestAudioFocus(OnAudioFocusChangeListener l, int streamType, int durationHint) теперь тоже deprecated. Вместо него надо использовать AudioManager.requestAudioFocus(AudioFocusRequest focusRequest). AudioFocusRequest — новый класс, добавленный с API 26, поэтому не забывайте проверять на API level.
Создание AudioFocusRequest выглядит следующим образом
Теперь запрашиваем фокус
Разумеется, все вышеописанные изменения вносить необязательно, старые методы работать не перестали.
Еще очень рекомендую к просмотру доклад Ian Lake. Доклад от 2015 года, но вполне актуален.
Перед любым разработчиком, занимающимся созданием красивых интерактивных приложений, рано или поздно встает вопрос об использовании мультимедийных возможностей телефона. Для работы со звуком в Android программисты активно используют две библиотеки. Первая из них предоставляет класс SoundPool, вторая - MediaPlayer.
Класс SoundPool удобно использовать для проигрывания коротких аудиоклипов. С его помощью можно проигрывать несколько звуков одновременно, при этом размер звукового файла не должен превышать 1 Mb. Класс MediaPlayer лучше подходит для воспроизведения долгих аудио и видеороликов.
Android управление звуком
Android поддерживает различные аудиопотоки для разных целей. Регулятор расположенная на торце телефона качелька для регулирования громкости управляет только одним аудиопотоком. Для того, чтобы привязать эту кнопку к аудиопотоку необходимо указать его тип в приложении
Как проиграть звук через SoundPool
Напишем приложение, которое будет проигрывать звук при касании экрана. Создадим новый проект с именем CrazySong, пакет назовем
ru.mobilab.crazysong, в качестве главной Activity укажем CrazySongActivity.
Приведем main.xml к виду
Давайте рассмотрим последовательность действий, которую необходимо выполнить для того, чтобы воспроизвести звуковой файл. Прежде всего мы должны создать объект soundPool. Его конструктор имеет несколько параметров. Первый параметр задает максимальное число одновременно проигрываемых файлов. Второй параметр задает тип аудиопотока. В большинстве случаев здесь подойдет значение soundPool STREAM_MUSIC, хотя возможно использование и других аудиопотоков. Их назначение довольно очевидно. (STREAM_ALARM, STREAM_DTMF, STREAM_NOTIFICATION, STREAM_RING,STREAM_SYSTEM, STREAM_VOICE_CALL). Третий параметр задает sample-rate. В настоящее время он ни на что не влияет, поэтому здесь устанавливаем 0.
После того, как мы создали объект для SoundPool, с помощью setOnLoadCompleteListener добавим к нему OnLoadCompleteListener, который будет отслеживать завершение загрузки файлов. В качестве параметров метод onLoadComplete принимает объект SoundPool, номер загруженного сэмпла и статус завершения операции. В случае, если все прошло успешно, статус равен нулю.
Прежде чем проигрывать звуковые файлы их необходимо загрузить в SoundPool. Сделать это можно с помощью метода load. Метод имеет несколько реализаций, различающихся набором параметров и источником, поставляющим звуковые файлы. Можно загружать файлы из папки asset, можно из APK ресурсов, можно из файла, указав к нему путь, можно из FileDescriptor. Мы будем рассматривать ситуацию, когда звуковые сэмплы входят в состав APK пакета, то есть лежат в папке res/raw вашего проекта. Для загрузки нам понадобятся три параметра: ссылка на контекст из которого мы получаем доступ к ресурсам программы (в большинстве случаев подойдет this), ссылка на ресурс, полученная через объект R, и приоритет, который пока ни на что не влияет, и в документации рекомендуется устанавливать значение 1. Загруженные ресурсы можно выгрузить с помощью методов unload, если требуется удалить один сэмпл, и release - если нужно полностью очистить SoundPool.
Для проигрывания сэмпла используется метод play, имеющий следующие параметры:
- soundID переменная с номером сэмпла. Этот номер возвращается в результате выполнения метода load.
- leftVolume значение громкости левого канала (от 0.0 до 1.0)
- rightVolume значение громкости правого канала (от 0.0 до 1.0)
- priority приоритет потока (0 - самый низкий приоритет)
- loop сколько раз нужно повторить сэмпл (0 не повторять, -1 - зациклить)
- rate скорость воспроизведения (может изменяться от 0.5 до 2.0, 1 - нормальная скорость)
В результате выполнения метода play возвращается номер streamID (или 0 в случае ошибки), который можно использовать для управления воспроизведением. Например это значение используется при вызове методов pause и resume, stop, setVolume, setLoop. Если число максимально проигрываемых файлов превышено, то вызов очередного метода play приведет к завершению воспроизведения одного из проигрываемых в данный момент сэмплов.
Код нашего класса приведен ниже
package ru.mobilab.crazysong;
SoundPool и утечка памяти
но похоже, что этот метод не решает проблему вAndroid 2.1. Если Вы располагаете информацией об этой проблеме и ее решении, просьба отписаться в комментариях.
Воспроизведение фоновой музыки в Android с помощью MediaPlayer
SoundPool отлично подходит для озвучивания различных игровых событий: выстрелов, взрывов, реплик. Однако для проигрывания фоновой музыки нужно использовать класс MediaPlayer. Метод create этого класса имеет два параметра: контекст и ссылку на ресурс или URI адрес музыкального файла. Для запуска/паузы/остановки воспроизведения служат методы start(), pause() и stop() соответственно. Все просто.
В случае, если Вы собираетесь подгружать файл из интернета, последовательность действий будет немного другая. Метод create использовать не нужно. Источник аудиоданных задается с помощью метода setDataSource, после которого нужно вызвать метод prepare(), блокирующий выполнение потока до тех пор, пока медиаплеер не будет готов к воспроизведению музыки. Метод prepareAsync() выполняет те же действия в асинхронном режиме, то есть не блокирует вызвавший его поток. В случае использования prepareAsync нужно использовать OnPreparedListener для определения момента, когда MediaPlayer готов к проигрыванию файла. Заметим, что при использовании метода create метод prepare вызывать не нужно, поскольку он вызывается внутри create.
Остался еще один актуальный вопрос: как определить, что воспроизведение файла закончилось? Для этой цели служит функция обратного вызова onCompletion. Чтобы привязать ее к нашему медиаплееру нужно выполнить следующий код:
Вот собственно и все. Воспроизведение звука не такая уж и сложная тема. Архив с проектом можетескачать здесь.
Читайте также: