Звук делает приложение живым: музыка в игре, щелчок при нажатии кнопки или голосовое сообщение. Чтобы работать с аудио, в арсенале Android есть простой инструмент — MediaPlayer. Сегодня в Android Studio мы подключим его и напишем небольшое приложение с тремя кнопками, которое умеет запускать, приостанавливать и останавливать мелодию. Занятие на Kotlin построено так, чтобы каждый, кто впервые пробует звук, сразу получил работающий результат.
Готовим аудиофайл
Для начала нам понадобится сам звук. Подойдёт любой короткий MP3-файл. Положите его в папку res/raw. Если такой папки ещё нет, создайте её: щёлкните правой кнопкой по res, выберите New → Android Resource Directory и в поле Resource type укажите raw. Скопируйте туда ваш файл, назвав его, например, sample_audio.mp3. Система будет обращаться к нему через идентификатор R.raw.sample_audio.
Собираем интерфейс
В файле activity_main.xml разместите три кнопки горизонтально: Play, Pause и Stop. Для этого удобно взять LinearLayout с горизонтальной ориентацией и равномерно распределить в нём кнопки через вес. Каждой задайте свой id.
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/btnPlay"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Play" />
<Button
android:id="@+id/btnPause"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Pause" />
<Button
android:id="@+id/btnStop"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Stop" />
</LinearLayout>
Создаём MediaPlayer в коде
В MainActivity.kt объявим переменную mediaPlayer и инициализируем её в onCreate. Для создания плеера используется статический метод MediaPlayer.create, который принимает контекст и ссылку на аудиофайл. Затем сразу готовим плеер к воспроизведению.
private var mediaPlayer: MediaPlayer? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
mediaPlayer = MediaPlayer.create(this, R.raw.sample_audio)
}
Кнопка Play
Находим кнопку Play и вешаем на неё простой вызов start(). Если плеер уже играет, повторный вызов не навредит — он просто продолжит. Дополнительно можно проверять, не проигрывается ли уже трек, с помощью isPlaying, но для простоты опустим эту проверку.
btnPlay.setOnClickListener {
mediaPlayer?.start()
}
Кнопка Pause
Метод pause() ставит воспроизведение на паузу. При повторном нажатии Play оно продолжится с того же места. Это удобно для длинных аудиозаписей.
btnPause.setOnClickListener {
mediaPlayer?.pause()
}
Кнопка Stop
Остановка плеера выполняется через stop(). После остановки нужно заново подготовить плеер к следующему запуску, иначе Play не сработает. Для этого вызываем prepare() сразу после stop().
btnStop.setOnClickListener {
mediaPlayer?.stop()
mediaPlayer?.prepare()
}
Освобождаем ресурсы
Когда Activity уничтожается, плеер должен быть освобождён, чтобы не занимать системные ресурсы. Переопределим метод onDestroy и вызовем release().
override fun onDestroy() {
super.onDestroy()
mediaPlayer?.release()
mediaPlayer = null
}
Весь код MainActivity
class MainActivity : AppCompatActivity() {
private var mediaPlayer: MediaPlayer? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
mediaPlayer = MediaPlayer.create(this, R.raw.sample_audio)
val btnPlay = findViewById<Button>(R.id.btnPlay)
val btnPause = findViewById<Button>(R.id.btnPause)
val btnStop = findViewById<Button>(R.id.btnStop)
btnPlay.setOnClickListener { mediaPlayer?.start() }
btnPause.setOnClickListener { mediaPlayer?.pause() }
btnStop.setOnClickListener {
mediaPlayer?.stop()
mediaPlayer?.prepare()
}
}
override fun onDestroy() {
super.onDestroy()
mediaPlayer?.release()
mediaPlayer = null
}
}
Несколько подсказок начинающим
- Не кладите тяжёлые файлы в raw. Папка
res/rawхранит файлы без сжатия, и они увеличивают размер APK. Для больших аудиозаписей лучше загружать их из интернета или с SD-карты. - Обрабатывайте ошибки. Если файл не найден или повреждён,
MediaPlayer.createвернёт null. Добавьте проверку перед вызовом методов. - Учитывайте фокус аудио. Если приложение должно уступать звук звонкам, используйте AudioManager и запрашивайте аудиофокус. Но для простого урока это избыточно.
Чему мы научились
Сегодняшний практический урок показал, как в Android Studio с помощью языка Kotlin легко управлять воспроизведением звука. Вы создали плеер из локального файла, запрограммировали кнопки Play, Pause и Stop и не забыли освободить ресурсы при закрытии экрана. Теперь в вашем распоряжении есть готовый шаблон для добавления фоновой музыки, звуковых эффектов или даже простого диктофона. Попробуйте загрузить другой аудиофайл или добавить кнопку перемотки — это сразу даст более глубокое понимание работы MediaPlayer.