MediaPlayer — это класс Kotlin Android, который используется для управления воспроизведением аудио/видео файлов и потоков.
Класс android.media.MediaPlayer используется для управления аудио- или видеофайлами. Он получает доступ к встроенным службам медиаплеера, таким как воспроизведение аудио, видео и т. д. Чтобы использовать класс MediaPlayer, мы должны вызвать создание его экземпляра, вызвав метод create() этого класса.
Методы класса MediaPlayer
Доступно несколько методов класса MediaPlayer. Вот некоторые из них:
| Метод | Описание |
|---|---|
| public void setDataSource(String path) | Он устанавливает источник данных (путь к файлу или URL-адрес http) для использования. |
| public void prepare() | Подготавливает плеер к синхронному воспроизведению. |
| public void start() | Запускает или возобновляет воспроизведение. |
| public void stop() | Останавливает воспроизведение. |
| public void pause() | Приостанавливает воспроизведение. |
| public boolean isPlaying() | Проверяет, воспроизводится ли медиаплеер. |
| public void seekTo(int millis) | Ищет указанное время в миллисекундах. |
| public void setLooping(boolean looping) | Он устанавливает плеер для зацикливания или без зацикливания. |
| public boolean isLooping() | Проверяет, зациклен ли плеер или нет. |
| public void selectTrack(int index) | Выбирает дорожку для указанного индекса. |
| public int getCurrentPosition() | Возвращает текущую позицию воспроизведения. |
| public int getDuration() | Возвращает продолжительность файла. |
| public void setVolume(float leftVolume,float rightVolume) | Он устанавливает громкость на этом плеере. |
Пример Android MediaPlayer с SeekBar
В этом примере мы создадим медиаплеер с функциями управления воспроизведением, такими как воспроизведение, пауза и остановка. Мы также интегрируем SeekBar, чтобы показать уровень прогресса медиаплеера.
Activity_main.xml
В файл макета activity_main.xml мы добавляем кнопки для управления воспроизведением мультимедиа, TextView для отображения продолжительности песни и SeekBar для отображения уровня выполнения медиафайла.
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="example.javatpoint.com.kotlinmediaplayer.MainActivity">
<Button
android:id="@+id/pauseBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:enabled="false"
android:text="Pause"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/playBtn"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/playBtn"
android:layout_width="88dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:text="Play"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/stopBtn"
app:layout_constraintStart_toEndOf="@+id/pauseBtn"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/stopBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginEnd="24dp"
android:layout_marginRight="24dp"
android:layout_marginTop="8dp"
android:enabled="false"
android:text="Stop"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<RelativeLayout
android:layout_width="368dp"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="76dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/tv_pass"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/tv_due"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true" />
<SeekBar
android:id="@+id/seek_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/tv_pass"
android:saveEnabled="false" />
</RelativeLayout>
</android.support.constraint.ConstraintLayout>
MianActivity.kt
Экземпляр класса MediaPlayer создается с помощью метода MediaPlayer.create(). В этом примере мы читаем медиафайл из исходного каталога. Метод MediaPlayer.start() запускает воспроизведение медиафайла, метод MediaPlayer.pause() приостанавливает воспроизведение медиафайла, а метод Media.stop() останавливает воспроизведение медиафайла.
package example.javatpoint.com.kotlinmediaplayer
import android.media.MediaPlayer
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import kotlinx.android.synthetic.main.activity_main.*
import android.os.Handler
import android.widget.SeekBar
class MainActivity : AppCompatActivity() {
private lateinit var mediaPlayer: MediaPlayer
private lateinit var runnable:Runnable
private var handler: Handler = Handler()
private var pause:Boolean = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Start the media player
playBtn.setOnClickListener{
if(pause){
mediaPlayer.seekTo(mediaPlayer.currentPosition)
mediaPlayer.start()
pause = false
Toast.makeText(this,"media playing",Toast.LENGTH_SHORT).show()
}else{
mediaPlayer = MediaPlayer.create(applicationContext,R.raw.school_bell)
mediaPlayer.start()
Toast.makeText(this,"media playing",Toast.LENGTH_SHORT).show()
}
initializeSeekBar()
playBtn.isEnabled = false
pauseBtn.isEnabled = true
stopBtn.isEnabled = true
mediaPlayer.setOnCompletionListener {
playBtn.isEnabled = true
pauseBtn.isEnabled = false
stopBtn.isEnabled = false
Toast.makeText(this,"end",Toast.LENGTH_SHORT).show()
}
}
// Pause the media player
pauseBtn.setOnClickListener {
if(mediaPlayer.isPlaying){
mediaPlayer.pause()
pause = true
playBtn.isEnabled = true
pauseBtn.isEnabled = false
stopBtn.isEnabled = true
Toast.makeText(this,"media pause",Toast.LENGTH_SHORT).show()
}
}
// Stop the media player
stopBtn.setOnClickListener{
if(mediaPlayer.isPlaying || pause.equals(true)){
pause = false
seek_bar.setProgress(0)
mediaPlayer.stop()
mediaPlayer.reset()
mediaPlayer.release()
handler.removeCallbacks(runnable)
playBtn.isEnabled = true
pauseBtn.isEnabled = false
stopBtn.isEnabled = false
tv_pass.text = ""
tv_due.text = ""
Toast.makeText(this,"media stop",Toast.LENGTH_SHORT).show()
}
}
// Seek bar change listener
seek_bar.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
override fun onProgressChanged(seekBar: SeekBar, i: Int, b: Boolean) {
if(b) {
mediaPlayer.seekTo(i * 1000)
}
}
override fun onStartTrackingTouch(seekBar: SeekBar) {
}
override fun onStopTrackingTouch(seekBar: SeekBar) {
}
})
}
// Method to initialize seek bar and audio stats
private fun initializeSeekBar() {
seek_bar.max = mediaPlayer.seconds
runnable = Runnable {
seek_bar.progress = mediaPlayer.currentSeconds
tv_pass.text = "${mediaPlayer.currentSeconds} sec"
val diff = mediaPlayer.seconds - mediaPlayer.currentSeconds
tv_due.text = "$diff sec"
handler.postDelayed(runnable, 1000)
}
handler.postDelayed(runnable, 1000)
}
}
// Creating an extension property to get the media player time duration in seconds
val MediaPlayer.seconds:Int
get() {
return this.duration / 1000
}
// Creating an extension property to get media player current position in seconds
val MediaPlayer.currentSeconds:Int
get() {
return this.currentPosition/1000
}
Вывод:



