class MediaPlayerHelp private constructor(context: Context) {
private var onMediaPlayerHelpListener: OnMediaPlayerHelpListener? = null//实现字段
// 定义接口
interface OnMediaPlayerHelpListener {
fun onPrepared(mp: MediaPlayer?)
fun onCompletion(mp: MediaPlayer?)
}
// 设置接口
fun setOnMediaPlayerHelpListener(onMediaPlayerHelpListener: OnMediaPlayerHelpListener) {
this.onMediaPlayerHelpListener = onMediaPlayerHelpListener
}
/**
* 1.音乐正在播放或者切换了音乐时,重置音乐播放状态
* 2.设置播放音乐路径
* 3.准备--播放
*/
fun setPath(path: String) {
if (path != (mPath) || mMediaPlayer.isPlaying) {
mMediaPlayer.reset()
}
mPath = path
try {
mMediaPlayer.setDataSource(mContext, Uri.parse(mPath))
Log.d(TAG, "找到数据源完成")
} catch (e: Exception) {
return
}
Log.d(TAG, " 开始异步加载")
mMediaPlayer.prepareAsync()
回调函数调用外部实现类来实现回调
mMediaPlayer.setOnPreparedListener { mp ->
if (onMediaPlayerHelpListener != null) {
onMediaPlayerHelpListener?.onPrepared(mp)
}
}
mMediaPlayer.setOnCompletionListener { mp ->
if (onMediaPlayerHelpListener != null) {
onMediaPlayerHelpListener?.onCompletion(mp)
}
}
}
}
外部类调用,首先是建立一个传入一个匿名对象,再调用需要这个匿名对象的函数
mMediaPlayerHelp.setOnMediaPlayerHelpListener(object :MediaPlayerHelp.OnMediaPlayerHelpListener{
override fun onPrepared(mp: MediaPlayer?) {
Log.d(TAG, "正在进行异步加载和播放")
mMediaPlayerHelp.startPlay()
}
override fun onCompletion(mp: MediaPlayer?) {
Log.d(TAG, "mMediaPlayer内部监听异步准备完成")
mMediaPlayerHelp.startPlay()
}
})
mMediaPlayerHelp.setPath(path)
本文介绍了一个MediaPlayerHelper类,它实现了音乐播放控制,包括设置音乐路径、准备播放和监听播放状态变化。通过接口OnMediaPlayerHelpListener,外部类可以定制回调处理。关键功能如异步加载、路径重置和播放控制得到了详细展示。

被折叠的 条评论
为什么被折叠?



