安卓开发入门教程-通过MediaPlayer播放音频

什么是MediaPlayer

MediaPlayer是用来播放音频的控件,可以支持播放本地及网络音频.

基础样例

  1. 代码
class MainActivity : AppCompatActivity() {
    private lateinit var mediaPlayer: MediaPlayer
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        startBtn.setOnClickListener {
            //            playFromRaw()
//            playFromAssets()
//            playFromSdCard()
            playFromUrl()
            stopBtn.isEnabled = true
            startBtn.isEnabled = false
        }

        stopBtn.setOnClickListener {
            mediaPlayer.stop()
            stopBtn.isEnabled = false
            startBtn.isEnabled = true
        }

    }

    /**
     * 播放raw目录下文件
     */
    private fun playFromRaw() {
        mediaPlayer = MediaPlayer.create(this, R.raw.test)
        mediaPlayer.start()
    }

    /**
     * 播放assets目录下文件
     */
    private fun playFromAssets() {
        val fd = assets.openFd("test.mp3")
        mediaPlayer = MediaPlayer()
        mediaPlayer.setDataSource(fd.fileDescriptor, fd.startOffset, fd.length)
        mediaPlayer.prepare()
        mediaPlayer.start()
    }

    /**
     * 播放SD卡上文件
     * 需要动态申请SD读权限
     */
    private fun playFromSdCard() {
        val path = "/sdcard/test.mp3"
        mediaPlayer = MediaPlayer()
        mediaPlayer.setDataSource(path)
        mediaPlayer.prepare()
        mediaPlayer.start()
    }

    /**
     * 播放URL对应文件
     *
     * 如果希望反复重用同一个MediaPlayer,可以在setDataSource前调用:stop()和reset()
     */
    private fun playFromUrl() {
        val audioUrl = "https://gitee.com/cxyzy1/audioPlayerDemo/raw/master/test.mp3"     //这里给一个歌曲的网络地址就行了
        mediaPlayer = MediaPlayer()
        mediaPlayer.setDataSource(audioUrl)
        mediaPlayer.prepareAsync()
        mediaPlayer.setOnPreparedListener { mp -> mp.start() }
    }

}
  1. 权限申请(播放网络视频才需要)
    在AndroidManifest中增加:
<uses-permission android:name="android.permission.INTERNET" />

完整源代码

https://gitee.com/hspbc/audioPlayerDemo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值