美文网首页
Android MediaPlayer调用raw/assets/

Android MediaPlayer调用raw/assets/

作者: 没有了遇见 | 来源:发表于2022-03-27 15:39 被阅读0次

MediaPlayer Android 体统的播放流媒体文件的工具类,项目需要播放音频,特此简单记录一下音频播放的方法调用

1. MediaPlayer支持:AAC、AMR、FLAC、MP3、MIDI、OGG、PCM等格式

2. MediaPlayer 方法调用

Media方法调用.png
  • MediaPlayer() ,MediaPlayer.create(mContext, rawRes) 初始化方法
    注意:MediaPlayer.create() 方法内部调用了prepare 方法 所以直接start()就行 多次调用会异常

  • setDataSource() 设置资源


    多个方法.png
  • setOnCompletionListener() 完成的监听

  • setOnErrorListener()播放异常的监听

  • setOnPreparedListener() 准备完成的监听

  • start() 开始播放

  • pause() 暂停

  • release() 销毁

三种资源实现播放:

工具类

package com.wu.material.util
import android.annotation.SuppressLint
import android.content.Context
import android.content.res.AssetFileDescriptor
import android.media.AudioManager
import android.media.MediaPlayer
import android.net.Uri
import android.os.Build
import androidx.annotation.RequiresApi

/**
 * 音频播放
 */
@SuppressLint("StaticFieldLeak")
object MediaPlayerUtil {

    private var mContext: Context? = null
    var mPlayer: MediaPlayer? = null

    private var isPause = false

    private var isPlaying = false

    fun isPlaying(): Boolean {
        return isPlaying
    }

    fun initMedia(mContext:Context,rawRes: Int) {
        mPlayer = MediaPlayer.create(mContext, rawRes)
        mPlayer!!.setAudioStreamType(AudioManager.STREAM_MUSIC)
    }

    @RequiresApi(Build.VERSION_CODES.N)
    fun initMedia(mContext:Context, fad: AssetFileDescriptor) {
        mPlayer = MediaPlayer()
        mPlayer!!.setDataSource(fad)
    }

    fun initMedia(mContext:Context,path: String) {
        mPlayer = MediaPlayer()
        mPlayer!!.setDataSource(path)
    }

    fun initUriMedia(mContext:Context,uriPath: String) {
        mPlayer = MediaPlayer()
        mPlayer!!.setDataSource(mContext!!, Uri.parse(uriPath))
        mPlayer!!.setAudioStreamType(AudioManager.STREAM_MUSIC)
    }

    fun setMediaListener(listener: MediaPlayerListener) {
        mPlayer!!.setOnCompletionListener {
            isPlaying = false
            listener.finish()
        }

        mPlayer!!.setOnErrorListener { mp, what, extra ->
            isPlaying = false
            listener.onErr(what)
            false
        }
        mPlayer!!.setOnPreparedListener {
            listener.prepare()
        }
    }

    fun playMedia() {
        if (mPlayer != null && !mPlayer!!.isPlaying) {
            mPlayer!!.start()
        }
    }

    fun prepare() {
        if (mPlayer != null && !mPlayer!!.isPlaying) {
            mPlayer!!.prepare()
        }
    }

    fun prepareAsync() {
        if (mPlayer != null && !mPlayer!!.isPlaying) {
            mPlayer!!.prepareAsync()
        }
    }

    fun pause() {
        if (mPlayer != null && mPlayer!!.isPlaying) {
            mPlayer!!.pause()
            isPause = true
        }
    }

    // 继续
    fun resume() {
        if (mPlayer != null && isPause) {
            mPlayer!!.start()
            isPause = false
        }
    }

    fun release() {
        if (mPlayer != null) {
            try {
                mPlayer!!.a's'()
            } catch (e: Exception) {
            }
            mPlayer = null
        }
        isPlaying = false
    }

}

注意:MediaPlayer.create() 内部已调用 mp.prepare()


源码查看.png

1.引用raw 的资源播放音频

        MediaPlayerUtil.initMedia(this,R.raw.audio)
        MediaPlayerUtil.setMediaListener(object :MediaPlayerListener{
            override fun onErr(messageCode: Int) {
            }

            override fun finish() {
            }

            override fun prepare() {
            }
        })

        MediaPlayerUtil.playMedia()

2.引用assets的资源播放音频

 var fikkDes= assets.openFd("audio.mp3") as AssetFileDescriptor
        MediaPlayerUtil.initMedia(this,fikkDes)
        MediaPlayerUtil.setMediaListener(object :MediaPlayerListener{
            override fun onErr(messageCode: Int) {
            }

            override fun finish() {
            }
            override fun prepare() {
                MediaPlayerUtil.playMedia()
            }
        })
        MediaPlayerUtil.prepareAsync()

3.引用网络资源播放音频

   var path="https://downsc.chinaz.net/Files/DownLoad/sound1/202103/s1024.mp3"
    private fun playRawUri() {
        MediaPlayerUtil.initMedia(this,path)

        MediaPlayerUtil.setMediaListener(object :MediaPlayerListener{
            override fun onErr(messageCode: Int) {
            }

            override fun finish() {
            }
            override fun prepare() {
                MediaPlayerUtil.playMedia()
            }
        })
        MediaPlayerUtil.prepareAsync()
    }

总结

如有帮助欢迎点赞,
源码地址

相关文章

网友评论

      本文标题:Android MediaPlayer调用raw/assets/

      本文链接:https://www.haomeiwen.com/subject/eispjrtx.html