Android studio mediaplayer stop не работает

Android Studio: запуск и остановка звука с помощью mediaPlayer

Как start и stop воспроизводить музыку, используя одну и ту же кнопку. Приведенный ниже код будет воспроизводить песню несколько раз (с перекрытием), если я нажму на нее несколько раз.

И еще одна проблема — куда вставить функции starTimer и StopTimer , чтобы starTimer был активен, если звук не воспроизводится, и stopTimer будет активен, если звук воспроизводится.

И для функции startTimer stopTimer

4 ответа

Пожалуйста, укажите ниже код в Global:

Теперь в onCreate методе:

Кнопка паузы воспроизведения:

Когда аудио готово к воспроизведению:

Аудио завершено, затем автоматическая остановка:

Не забудьте добавить эту строку:

Чтобы остановить музыку / звук с помощью медиаплеера, создайте логическое значение isPlaying . сделать это правдой, когда музыка играет

Объявите isPlaying как глобальную переменную как

Теперь вы можете создать метод, который будет проверять значение isPlaying и воспроизводить или приостанавливать музыку, вызывая этот метод onClick() кнопки

Надеюсь, это поможет!

Приведенный ниже код будет воспроизводить песню несколько раз (с перекрытием), если я нажму на нее несколько раз.

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

И не нужно иметь переменную, чтобы проверить, воспроизводится ли медиа, так как вы можете проверить это непосредственно из объекта медиаплеера.

Так что измени свой код на

Что касается вопроса с таймером, не очень понятно, как вы используете свой таймер?

Лучше сделать одно логическое значение при нажатии кнопки, а затем легко обрабатывать

IsClick имеет значение false, означает, что если будет выполнено другое действие. В противном случае вы делаете остановку медиаплеера и функцию остановки таймера.

Источник

Сервис MediaPlayer не работает в Android Studio

Я использую следующий код для MediaPlayer сервисов. Но следующая служба не работает. Звучат тосты, но плеер не играет ни одной песни. Метод ‘ onStart() ‘ устарел, так как я его переопределяю.

Android файл манифеста:

Может ли кто-нибудь помочь мне решить эту проблему?

2 ответа

Я новичок в android studio, и когда я пытаюсь запустить команду для импорта проигрывателя media, она не распознается, и при установке оптимизации она будет удаляться каждый раз, когда я ввожу команду для импорта mediaplayer на кодовой странице java. Это похоже на то, что у меня нет проигрывателя.

Моя цель-создать VideoView , который может воспроизводить видео в списке воспроизведения pre-defined . Я пытаюсь использовать MediaPlayer.setNextMediaPlayer(. ) , чтобы обеспечить плавный переход между двумя видео. Однако, когда первое видео завершит воспроизведение, 2-е видео не запустится.

Попробуйте этот код и определите в своем коде следующие вещи..

добавьте нижеприведенную строку в файл манифеста android .. между тегом приложения..

Вы должны переопределить метод onStartCommand() и вернуть START_STICKY , посмотрите это!

обратитесь к этой ссылке для лучшего понимания приведенного выше метода и START_STICKY . Надеюсь, это вам поможет!

Похожие вопросы:

У меня проблема в Android Studio. Я делаю звуковую доску и хочу сделать свой MediaPlayer null, когда он закончит играть. Я создал on complete listener, но внутри listener, когда я делаю свой.

Я использую класс android MediaPlayer, и одно из действий этого приложения имеет кнопки play, pause и select mp3. Приложение имеет в общей сложности 4 вида деятельности. Я могу заставить его.

Несколько лет назад я написал приложение Android (используя Eclipse и ADT). Недавно мне пришлось вернуться к нему с помощью Android Studio , потому что он таинственным образом перестал работать. Я.

Я новичок в android studio, и когда я пытаюсь запустить команду для импорта проигрывателя media, она не распознается, и при установке оптимизации она будет удаляться каждый раз, когда я ввожу.

Моя цель-создать VideoView , который может воспроизводить видео в списке воспроизведения pre-defined . Я пытаюсь использовать MediaPlayer.setNextMediaPlayer(. ) , чтобы обеспечить плавный переход.

я пытаюсь воспроизвести 1 из 2 звуков , correct.mp3 или incorrect.mp3, которые хранятся в моей папке активов. Это код для моей службы: public class MinesweeperSound extends Service < MediaPlayer.

Читайте также:  Нет звука при разговоре по телефону андроид

Я использую android studio 3.1 для некоторого развития. Но он не показывает опцию android в меню Tools . В то время как Android studio 3.0 не имеет этой проблемы. Вот скриншот меню инструментов.

Из документов: Чтобы запустить AVD Manager, выполните одно из следующих действий: В Android Studio выберите сервис > Android > AVD Manager . Нажмите кнопку AVD Manager на панели инструментов. Ни.

Я новичок в android studio. Я пытался сделать плеер media, но получил сообщение об ошибке: java.lang.NullPointerException: Attempt to invoke virtual method ‘void android.media.MediaPlayer.start()’.

У меня есть простая программа в android studio с одной кнопкой для воспроизведения аудиофайла. Однако звук не работает, когда я нажимаю кнопку. PS. Я использую эмулятор public class MainActivity.

Источник

Android studio mediaplayer stop не работает

Не работает MediaPlayer.stop();

al_mt Дата: Суббота, 31 Октября 2015, 14:10 | Сообщение # 1

Начал учить яву.
Написал простенькую рисовалку для планшета, пару классов для 2D-анимированных спрайтов, оптимистично кинулся портировать игрушки с javaScript
Аха. ЩЩаз 🙂

Внезапно обнаружил, что если я создаю поток — наследник Thread то из него не получается управлять объектами класса MediaPlayer !
Причём я могу создать объект, запустить на проигрывание, но методы stop() и pause() ни чего не делают, а метод release() вызывает ошибку 🙁

Ничего не работает, даже если я пытаюсь всё делать методами основного потока, вызывая их из другого.
Видимо я не въезжаю в какой-то фундаментальный момент.

Может быть кто подскажет?

Добавлено (31 октября 2015, 14:10)
———————————————
Пока выяснил, что сложные объекты нужно создавать и использовать в каждом потоке свои. Обмен между потоками нормально работает только для примитивов.

Может я чего перемудрявываю?
Главным потоком только создаю отдельный поток для расчётов и отдельный поток для графики.

monk05 Дата: Понедельник, 02 Ноября 2015, 18:53 | Сообщение # 2

Пару вопросов:
1. Где создаешь объект класса MediaPlayer — в главном потоке или в каком-то дочернем?
2. Работают ли эти методы, если они будут вызваны из главного потока?
al_mt Дата: Среда, 04 Ноября 2015, 22:40 | Сообщение # 3

Если создаю в главном и вызываю из главного работает
Если создаю в дочернем и вызываю из дочернего — работает
Если создаю в главном, вызываю из дочернего — не работает
Если создаю в дочернем, вызываю из главного — не работает

Причём не важно, обращаюсь я напрямую к public экземпляру или через метод класса — всё равно не работает.

В данный момент приспособился, вызываю только из метода run() того потока в котором создавал, тогда всё работает.

Добавлено (04 ноября 2015, 22:40)
———————————————
Наврал Нихрена не работает

monk05 Дата: Четверг, 05 Ноября 2015, 14:49 | Сообщение # 4

Я не силен в разработке Java приложений (больше как-то с Java EE работаю), но помню, когда еще на 2-ом курсе писали приложения на C#, там такая же штука была — нельзя было вызывать методы объектов из других процессов. Для решения этого момента была какая-то ужасная конструкция, уже не помню, что она собой представляла. Но факт остается фактом — нельзя вызывать некоторые методы объектов, относящихся к интерфейсу из другого потока.

На StackOverflow (ссылка) есть решение. Из него следует, что нужно иметь поток (либо создать его, либо использовать родительский), который будет создавать нужные тебе объекты (вдруг у тебя больше одного объекта MediaPlayer), и ждать от других потоков обработчики событий, чтобы исполнить их в контексте своего потока.

Чтобы адаптировать это решение к твоей задаче, можно сделать примерно так:

1. Сначала определить обработчик события

Источник

Проблемы с MediaPlayer, исходные ресурсы, остановка и запуск

Я новичок в разработке Android, и у меня есть вопрос / проблема.

Я играю с классом MediaPlayer для воспроизведения некоторых звуков / музыки. Я играю в сырые ресурсы ( res/raw ), и это выглядит легко.

Чтобы воспроизвести необработанный ресурс, MediaPlayer должен быть инициализирован следующим образом:

Пока здесь нет проблем. Звук воспроизводится, и все работает нормально. Моя проблема возникает, когда я хочу добавить дополнительные параметры в свое приложение. В частности, когда я добавляю кнопку «Остановить» / параметр.

В принципе, я хочу, чтобы … когда я нажимаю «Стоп», музыка останавливается. И когда я нажимаю «Старт», песня / звук начинается. (Довольно простой!)

Чтобы остановить медиаплеер, вам нужно только вызвать stop() . Но для повторного воспроизведения звука медиаплеер должен быть сброшен и подготовлен.

Проблема заключается в том, что метод setDataSource() принимает только в качестве параметров путь к файлу, Content Provider URI, путь к потоковому медиа URL или файловый дескриптор.

Таким образом, поскольку этот метод не принимает идентификатор ресурса, я не знаю, как установить источник данных, чтобы вызвать prepare() . Кроме того, я не понимаю, почему вы не можете использовать идентификатор Resouce для установки источника данных, но при инициализации MediaPlayer вы можете использовать идентификатор ресурса.

Наверное, я что-то упускаю. Интересно, смешиваю ли я понятия, а метод stop() не нужно вызывать в кнопке «Стоп». Любая помощь?

Вот что я сделал, чтобы загрузить несколько ресурсов с помощью одного MediaPlayer:

MediaPlay – это переменная-член, которая создается и освобождается в других точках класса. Это может быть не лучшим образом (я новичок в Android самостоятельно), но, похоже, это работает. Просто отметьте, что код, вероятно, попадет в нижнюю часть метода до того, как будет воспроизведен медиаплеер. Если вам нужно воспроизвести ряд ресурсов, вам все равно придется обрабатывать этот случай.

Так работает метод MediaPlayer.create для открытия необработанного файла:

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

Где com.package.name – это имя вашего пакета приложений

Вы можете использовать

Для остановки музыкального проигрывателя.

Наконец, как это работает для меня:

МИСТЕР. Rectangle, это сообщение, возможно, слишком поздно для него, но я с гордостью напишу эти коды к вашей идее: у меня есть mp для mediaplayer а sescal9 – button .

Источник

Полный список

MediaPlayer – класс, который позволит вам проигрывать аудио/видео файлы с возможностью сделать паузу и перемотать в нужную позицию. MediaPlayer умеет работать с различными источниками, это может быть: путь к файлу (на SD или в инете), адрес потока, Uri или файл из папки res/raw.

Напишем небольшое приложение аудио-плеер и используем в нем все эти возможности.

Project name: P1261_MediaPlayer
Build Target: Android 2.3.3
Application name: MediaPlayer
Package name: ru.startandroid.develop.p1261mediaplayer
Create Activity: MainActivity

Добавляем строки в strings.xml:

Так это выглядит на экране

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

Создайте папку res/raw и положите в нее какой-нить звуковой файл с именем explosion.mp3. Например, его можно скачать здесь — http://dl.dropboxusercontent.com/u/6197740/explosion.mp3.

Разбираемся. Сначала создаем константы-пути, которые будет использовать проигрыватель. Это файл в инете (DATA_HTTP), поток в инете (DATA_STREAM), файл на флэшке (DATA_SD) и Uri на мелодию из системы (DATA_URI). Для SD и Uri укажите ваши значения, чтобы такие файлы существовали. (По получению Uri в конце урока есть вспомогательный код)

В onCreate получаем AudioManager, находим на экране чекбокс и настраиваем так, чтобы он включал/выключал режим повтора для плеера.

onClickStart – метод для обработки нажатий на кнопки верхнего ряда. Сначала мы освобождаем ресурсы текущего проигрывателя. Затем в зависимости от нажатой кнопки стартуем проигрывание. Какие методы для этого используются?

setDataSource – задает источник данных для проигрывания

setAudioStreamType – задает аудио-поток, который будет использован для проигрывания. Их существует несколько: STREAM_MUSIC, STREAM_NOTIFICATION и п. Подробнее их можно посмотреть в доках по AudioManager. Предполагаю, что созданы они для того, чтобы можно было задавать разные уровни громкости, например, играм, звонкам и уведомлениям. Этот метод можно и пропустить, если вам не надо явно указывать какой-то поток. Насколько я понял, по умолчанию используется STREAM_MUSIC.

Далее используется метод prepare или prepareAsync (в паре с OnPreparedListener). Эти методы подготавливают плеер к проигрыванию. И, как понятно из названия, prepareAsync делает это асинхронно, и, когда все сделает, сообщит об этом слушателю из метода setOnPreparedListener. А метод prepare работает синхронно. Соотвественно, если хотим прослушать файл из инета, то используем prepareAsync, иначе наше приложение повесится, т.к. заблокируется основной поток, который обслуживает UI.

Ну и метод start запускает проигрывание.

В случае с raw-файлом мы используем метод create. В нем уже будет выполнен метод prepare и нам остается только выполнить start.

Далее мы для плеера включаем/выключаем повтор (setLooping) в зависимости от текущего значения чекбокса. И вешаем слушателя (setOnCompletionListener), который получит уведомление, когда проигрывание закончится.

В методе releaseMP мы выполняем метод release. Он освобождает используемые проигрывателем ресурсы, его рекомендуется вызывать когда вы закончили работу с плеером. Более того, хелп рекомендует вызывать этот метод и при onPause/onStop, если нет острой необходимости держать объект.

В методе onClick мы обрабатываем нажатия на кнопки управления проигрывателем. Какие здесь используются методы?

start – возобновляет проигрывание

seekTo – переход к определенной позиции трека (в милисекундах)

getCurrentPosition – получить текущую позицию (в милисекундах)

getDuration – общая продолжительность трека

isLooping – включен ли режим повтора

getStreamVolume – получить уровень громкости указанного потока

Далее идут методы

onPrepared – метод слушателя OnPreparedListener. Вызывается, когда плеер готов к проигрыванию.

onCompletion – метод слушателя OnCompletionListener. Вызывается, когда достигнут конец проигрываемого содержимого.

В методе onDestroy обязательно освобождаем ресурсы проигрывателя.

В манифесте добавляем права на интернет — android.permission.INTERNET.

Все сохраняем, запускаем приложение. Дизайн получившегося плеера, конечно, не ахти какой :), но нас сейчас интересует функционал.

Еще раз перечислю возможные действия. Нажимая верхние кнопки, мы запускаем проигрывание из различных источников. Кнопки среднего ряда позволят нам поставить паузу, возобновить/остановить проигрывание и включить режим повтора. Кнопки нижнего ряда перематывают назад/вперед на 3 сек (3000 мсек) и выводят инфу в лог.

Я включу проигрывание файла с SD и выведу инфу в лог (кнопка Info).

start SD
Playing true
Time 4702 / 170588
Looping false
Volume 10

Проигрывание идет, текущая позиция – 4-я секунда из 170, режим повтора выключен, громкость — 10.

Уменьшу громкость (кнопками устройства или эмулятора), включу режим повтора (чекбокс Loop), поставлю паузу (кнопка Pause) и снова выведу инфу в лог:

Playing false
Time 46237 / 170588
Looping true
Volume 6

Видим, что проигрывание остановилось, текущая позиция уже 46 секунд, режим повтора включен, а громкость уменьшилась до 6.

Теперь включу проигрывание потока (кнопка Stream). Смотрим лог:

08:49:13.799: D/myLogs(18805): start Stream
08:49:13.809: D/myLogs(18805): prepareAsync
08:49:27.589: D/myLogs(18805): onPrepared

Обратите внимание, сколько прошло времени с начала (prepareAsync) до завершения (onPrepared) подготовки проигрывателя – 14 секунд. Если бы мы использовали метод prepare, а не prepareAsync, то наше приложение было бы недоступно все это время.

Расскажу еще про несколько методов, которые я не использовал в примере, но о которых стоит знать.

Метод reset – сбрасывает плеер в начальное состояние, после него необходимо снова вызвать setDataSource и prepare. Похож на onRelease, но позволяет продолжить работу с этим же объектом. А вот после onRelease надо создавать новый объект MediaPlayer.

Метод setOnBufferingUpdateListener устанавливает слушателя буферизации проигрываемого потока. По идее слушатель будет получать процент буферизации, но у меня оно как-то странно работает — показывает или 0 или 100.

Метод setOnErrorListener устанавливает слушателя для получения ошибок. Особенно это полезно при методe prepareAsync. Если в ходе этого метода возникнут ошибки, то их можно поймать только так.

Метод setWakeMode позволяет ставить стандартную (PowerManager.WakeLock) блокировку на время проигрывания, указав тип блокировки. Не забудьте в манифесте добавить права на WAKE_LOCK.

По поводу видео. Метод setDisplay позволяет указать плееру, куда выводить изображение. Размещаете на экране компонент SurfaceView (вкладка Advanced), вызываете его метод getHolder и полученный объект передаете в setDisplay. Плеер выведет изображение на этот компонент.

Чтобы узнать размер проигрываемого изображения можно использовать методы getVideoHeight и getVideoWidth.

В хелпе класса MediaPlayer есть хорошая схема состояний плеера. Она кажется запутанной, но если посидеть и поразбираться, то вполне можно все понять. Схема полезная, советую вникнуть.

А здесь можно посмотреть какие форматы поддерживаются системой.

Также хелп любезно предоставляет нам код, который позволит просмотреть существующие медиа-файлы в системе:

На следующем уроке:

— работаем с SoundPool

Присоединяйтесь к нам в Telegram:

— в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.

— в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Kotlin, RxJava, Dagger, Тестирование

— ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня

— новый чат Performance для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме

Источник

Читайте также:  Vkmp3mod android что это
Оцените статью