Для первого примера в Android Studio проще всего использовать MediaPlayer и файл в папке res/raw. Положите туда файл, например click.mp3, затем создайте плеер и вызовите start()
Пример для Activity:
class MainActivity : AppCompatActivity() {
private var player: MediaPlayer? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val button = findViewById<Button>(R.id.playButton)
button.setOnClickListener {
player = MediaPlayer.create(this, R.raw.click)
player?.start()
}
}
override fun onDestroy() {
player?.release()
player = null
super.onDestroy()
}
}
Куда положить аудио
Создайте папку:
app/src/main/res/raw
Положите туда файл с простым именем: click.mp3, sound.wav, intro.mp3. В имени не должно быть пробелов, больших букв и странных символов. Android-ресурсы любят аккуратные имена в нижнем регистре
После этого файл будет доступен как:
R.raw.click
Как проверить
- Соберите проект.
- Запустите приложение на эмуляторе или телефоне.
- Нажмите кнопку.
- Убедитесь, что звук проигрался.
Если звука нет, проверьте громкость устройства и убедитесь, что файл действительно попал в res/raw, а не в assets или другую папку
Важный момент про ресурсы
MediaPlayer нужно освобождать через release(), когда он больше не нужен. В учебном примере это делается в onDestroy. В реальном приложении лучше продумать жизненный цикл: что будет при повороте экрана, уходе приложения в фон и повторном нажатии кнопки
Если звук короткий и нужен как эффект клика, иногда удобнее смотреть в сторону SoundPool. Если это музыка или длинное аудио, чаще выбирают более современный подход через Media3
Как не создавать новый плеер при каждом клике
Для короткого учебного примера код выше понятен, но при частых нажатиях лучше создать player один раз:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
player = MediaPlayer.create(this, R.raw.click)
findViewById<Button>(R.id.playButton).setOnClickListener {
player?.start()
}
}
Если звук уже проигрывается и нужно начать сначала, можно вызвать seekTo(0) перед start(). Для простого эффекта этого обычно хватает
Частые ошибки
Файл не виден как R.raw.name
Проверьте имя файла. Оно должно быть в нижнем регистре, без пробелов и дефисов
Звук накладывается сам на себя
Если пользователь быстро нажимает кнопку, вы можете создавать несколько плееров. Для первого примера это терпимо, но дальше лучше переиспользовать player или блокировать повторный запуск
Приложение держит ресурсы
Не забывайте release(). Иначе плеер может занимать системные ресурсы дольше, чем нужно
Файл слишком большой
Не кладите длинные треки и большие аудиофайлы в пример без понимания жизненного цикла. Для первого теста возьмите короткий mp3 на пару секунд
Что почитать дальше по Kotlin
Если нужен общий маршрут по теме, откройте рубрику Kotlin. Для соседних задач пригодятся эти разборы:
- Как в Android Studio поменять Kotlin на Java
- Как сделать тетрис в Android Studio на Kotlin
- Kotlin Android: первый экран без перегруза
- UUID Android-устройства в Kotlin ViewModel: как получить безопасно



