Kotlin Android Media Player — простое использование

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 
    } 

Вывод:

Kotlin Android Медиаплеер
Медиа проигрывается

Пауза

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