什么是MediaPlayer
MediaPlayer是用来播放音频的控件,可以支持播放本地及网络音频.
基础样例- 代码
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() }
}
}
- 权限申请(播放网络视频才需要) 在AndroidManifest中增加:
完整源代码
https://gitee.com/hspbc/audioPlayerDemo