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) | 它设置此播放器的音量。 |
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 Google Map当前位置
- Kotlin Android隐式Intent
- 使用URL的Kotlin Android JSON解析
- Kotlin Android Google Map固定位置
- Kotlin Android Google地图搜索位置
- Android Firebase身份验证-Google登录
- Kotlin Android Google AdMob横幅广告示例
- Kotlin Android Google AdMob非页内广告示例