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.srcmini02.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.srcmini02.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
}
输出:
评论前必须登录!
注册