Android media как работает

Что делать, если в приложении android process media произошла ошибка

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

Но вместе с повышением количества выполняющихся на устройстве задач, вырастает и шанс того, что один из процессов перестанет работать, сломается и выдаст ошибку. Одна из проблем, которая может произойти на вашем устройстве — ошибка в приложении android process media.

Когда может произойти ошибка в приложении android process media

Обычно с такой проблемой сталкиваются пользователи, попытавшиеся установить приложение из магазина Play Market. Также сбой в медиа-процессе может возникнуть при запуске каких-либо программ или гаджетов. Если устройство не сможет справиться с поставленной задачей, то ненадолго зависнет, а после выдаст уведомление с соответствующей надписью об ошибке в приложении android process media.

В приложении произошла ошибка android process media

Причины возникновения

На всех Android —устройствах существует специальный процесс, отвечающий за сканирование всех файлов системы. Нужен он для того, чтобы рассортировать по местам в фоновом режиме все фото, видео, папки и файлы других различных форматов. Например, вы закачали на телефон или планшет новую музыку в формате .mp3. В этот же самый момент android process media определит, к какой категории относится появившейся в системе файл, и отправит его к отвечающему за проигрывание музыки приложению. После этого вы сможете зайти в программу «Музыка» и увидеть там, в разделе «Добавленные недавно», вашу песню. Но процесс распределения может дать сбой, если наткнется на испорченные или некорректные файлы. Также ошибку может вызвать файл неизвестного системе формата, или одинаково названные папки во внутренней и внешней памяти.

Как устранить

Существует несколько способов, позволяющих решить возникшую проблему. Но все они предельно просты и не потребуют от вас каких-либо финансовых затрат и больших знаний в области Android-устройств.

Перезагрузка

Первое, что стоит сделать, если у вас возникла ошибка на телефоне, планшете или компьютере — перезагрузить устройство. При этом все процессы отключаться, а после самостоятельно возобновят работу. В том числе и медиа-процесс, сканирующий файлы системы.

Очистка кэша

Если первый способ не помог, то, возможно, дело во временных файлах, хранящихся на устройстве — в кэше. Чтобы очистить его, выполните следующие действия:

    Откройте приложение «Настройки» на своем устройстве.

Переходим в раздел «Приложения»

Переходим в раздел «Все»

Переходим в раздел «Диспетчер загрузок»

Нажимаем указанные кнопки

Переходим к общему списку

Переходим к процессу «Хранилище мультимедиа»

Нажимаем указанные кнопки

Нажимаем указанные кнопки

Нажимаем указанные кнопки

Заходим в раздел «Память»

Нажимаем на кнопку «Кэш»

Настройка карты памяти

Проблема может возникать из-за совпадений имен папок во внутренней памяти телефона с имена папок на SD-карте. Вручную проверьте обе памяти и переименуйте одинаково называющиеся папки.

Читайте также:  Видеоплеер для андроид с ускоренным воспроизведением

Убедиться в том, что проблема в SD-карте, вы можете, вытащив ее из телефона и попробовав закачать что-либо из Play Market или запустить приложение, которое раньше не открывалось. Если все заработало, то есть два выхода: приобрести новую карту памяти или отформатировать проблемную. Произвести форматирование, можно выполнив следующие шаги, но предварительно настоятельно рекомендуется скопировать все полезные и нужные файлы на другой носитель, так как все они будут безвозвратно удалены:

    Открываем приложение «Настройки».

Переходим в раздел «Память»

Нажимаем кнопку «Форматировать: MicroSD»

Нажимаем кнопку «Формат»

Настройка синхронизации с аккаунтом Google

Возможно, проблема возникает из-за проблем в синхронизации с сервисами Google. Чтобы отключить ее, выполните следующие шаги:

    Откройте приложение «Настройки».

Переходим в раздел «Аккаунты»

Нажимаем на иконку Google

Нажимаем на логин вашего аккаунта

Снимаем все галочки

Переходим в раздел «Приложения»

Перейдите в подраздел «Все»

Перейдите к приложению «Галерея»

Нажимаем указанные кнопки

Переходим к приложению «Диспетчер загрузки»

Остановите приложение и сотрите данные

Сброс настроек

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

    Откройте приложение «Настройки».

Переходим в раздел «Восстановление и сброс»

Нажимаем кнопку «Сброс настроек»

Нажимаем кнопку «Сброс»

Отключение сканирования определенных папок

Если вы точно знаете, из-за какого файла возникает проблема, но по каким-то причинам не хотите его удалять, то создайте в папке, в которой он хранится, файл с именем .nomedia. Это специальное название, дающие команду процессу сканирования не проверять файлы, находящиеся в папке.

Создаем папку с именем .nomedia

Особенности для разных версий Android

Ошибка android process media практически никогда не возникает на устройствах, с операционной системой версии 4.3 и выше. Так что если ваш телефон или планшет более ранней версии, и при этом поддерживает новые обновления, то выполните следующие действия:

    Откройте приложение «Настройки».

Переходим в раздел «О телефоне»

Нажимаем кнопку «Обновление системы»

Ждем, пока устройство найдет доступные обновления

Нажимаем кнопку «Загрузить»

Если вы неправильно удаляли приложения, закачивали в память телефона фото, видео или другие файлы неизвестного формата, или у вас сбились настройки карты или синхронизации аккаунта Google, то при выполнении некоторых операций может появиться ошибка android process media. Чтобы избавиться от нее, воспользуйтесь одной из вышеописанных инструкций. Если ни одна из них не помогла, то остается одно — обратиться в сервис, подробно описав возникшую проблему и то, какие способы ее устранения вы уже испробовали.

Источник

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

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:

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

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

Читайте также:  Install md5 file android

Создайте папку 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 мсек) и выводят инфу в лог.

Читайте также:  Разблокировка гугл аккаунта андроид хуавей y5

Я включу проигрывание файла с 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 для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме

Источник

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