具体的xml
代码就不贴了,看一下组件树
==============================================================
/**
- 初始化 及 资源准备
*/
private fun audioPrepare(path: String) {
mMediaPlayer = MediaPlayer().apply {
setDataSource(path)//支持文件、网络地址、uri
prepareAsync()//异步准备,不阻塞UI线程
isLooping = false//循环播放
}
initMediaPlayerListener()
}
setDataSource
,设置数据源,支持本地文件、网络请求的地址、uri等,看一下源码:
-
setDataSource(FileDescriptor)
-
setDataSource(String)
-
setDataSource(Context, Uri)
-
setDataSource(FileDescriptor, long, long)
-
setDataSource(MediaDataSource)
如果是本地文件,注意读写
权限。
prepareAsync()
异步准备,不阻塞UI线程
然后看一下调用的initMediaPlayerListener
方法
=====================================================================
/**
- 播放器监听事件
*/
private fun initMediaPlayerListener() {
mMediaPlayer?.setOnBufferingUpdateListener { mp, percent ->
LogUtil.i(“缓冲进度$percent%”)
}
mMediaPlayer?.setOnPreparedListener {
LogUtil.i(“准备完成”)
//在准备完成之后获取信息,否则会有异常
val duration = mMediaPlayer?.duration//时长
val currentPosition = mMediaPlayer?.currentPosition//当前位置
LogUtil.i(“当前位置 c u r r e n