Kotlin Android媒体播放器

MediaPlayer是用于控制音频/视频文件和流的播放的类。
android.media.MediaPlayer类用于控制音频或视频文件。它访问内置的媒体播放器服务, 例如播放音频, 视频等。要使用MediaPlayer类, 我们必须通过调用该类的create()方法来调用其创建实例。
MediaPlayer类的方法
MediaPlayer类有几种可用的方法。其中一些如下:

方法 描述
public void setDataSource(String path) 它设置要使用的数据源(文件路径或http url)。
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) 它设置此播放器的音量。
带有SeekBar的Android MediaPlayer示例 在此示例中, 我们将创建具有播放控制功能(如播放, 暂停和停止)的Media Player。我们还集成了SeekBar以显示媒体播放器的进度。
activity_main.xml
在activity_main.xml布局文件中, 添加“按钮”以控制媒体播放, “文本视图”显示歌曲的持续时间, “搜索栏”显示媒体文件的进度。
< ?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.srcmini.com.kotlinmediaplayer.MainActivity"> < Buttonandroid: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" /> < Buttonandroid: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" /> < Buttonandroid: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" /> < RelativeLayoutandroid: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"> < TextViewandroid:id="@+id/tv_pass"android:layout_width="wrap_content"android:layout_height="wrap_content" /> < TextViewandroid:id="@+id/tv_due"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentEnd="true"android:layout_alignParentRight="true" /> < SeekBarandroid: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.srcmini.com.kotlinmediaplayerimport android.media.MediaPlayerimport android.support.v7.app.AppCompatActivityimport android.os.Bundleimport android.widget.Toastimport kotlinx.android.synthetic.main.activity_main.*import android.os.Handlerimport android.widget.SeekBarclass MainActivity : AppCompatActivity() {private lateinit var mediaPlayer: MediaPlayerprivate lateinit var runnable:Runnableprivate var handler: Handler = Handler()private var pause:Boolean = falseoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)// Start the media playerplayBtn.setOnClickListener{if(pause){mediaPlayer.seekTo(mediaPlayer.currentPosition)mediaPlayer.start()pause = falseToast.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 = falsepauseBtn.isEnabled = truestopBtn.isEnabled = truemediaPlayer.setOnCompletionListener {playBtn.isEnabled = truepauseBtn.isEnabled = falsestopBtn.isEnabled = falseToast.makeText(this, "end", Toast.LENGTH_SHORT).show()}}// Pause the media playerpauseBtn.setOnClickListener {if(mediaPlayer.isPlaying){mediaPlayer.pause()pause = trueplayBtn.isEnabled = truepauseBtn.isEnabled = falsestopBtn.isEnabled = trueToast.makeText(this, "media pause", Toast.LENGTH_SHORT).show()}}// Stop the media playerstopBtn.setOnClickListener{if(mediaPlayer.isPlaying || pause.equals(true)){pause = falseseek_bar.setProgress(0)mediaPlayer.stop()mediaPlayer.reset()mediaPlayer.release()handler.removeCallbacks(runnable)playBtn.isEnabled = truepauseBtn.isEnabled = falsestopBtn.isEnabled = falsetv_pass.text = ""tv_due.text = ""Toast.makeText(this, "media stop", Toast.LENGTH_SHORT).show()}}// Seek bar change listenerseek_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 statsprivate fun initializeSeekBar() {seek_bar.max = mediaPlayer.secondsrunnable = Runnable {seek_bar.progress = mediaPlayer.currentSecondstv_pass.text = "${mediaPlayer.currentSeconds} sec"val diff = mediaPlayer.seconds - mediaPlayer.currentSecondstv_due.text = "$diff sec"handler.postDelayed(runnable, 1000)}handler.postDelayed(runnable, 1000)}}// Creating an extension property to get the media player time duration in secondsval MediaPlayer.seconds:Intget() {return this.duration / 1000}// Creating an extension property to get media player current position in secondsval MediaPlayer.currentSeconds:Intget() {return this.currentPosition/1000}

【Kotlin Android媒体播放器】输出:
Kotlin Android媒体播放器

文章图片
Kotlin Android媒体播放器

文章图片
Kotlin Android媒体播放器

文章图片

    推荐阅读