定义内部接口并在类内设置一个实现属性

本文介绍了一个MediaPlayerHelper类,它实现了音乐播放控制,包括设置音乐路径、准备播放和监听播放状态变化。通过接口OnMediaPlayerHelpListener,外部类可以定制回调处理。关键功能如异步加载、路径重置和播放控制得到了详细展示。
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)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值