一、播放音乐
播放音乐主要是使用 MediaPlayer类来实现!!
MediaPlayer类常用方法汇总:
工作流程:
- 创建一个MediaPlayer对象,调用 setDataSource() 方法,设置音频路径
- 调用 prepare() 方法来让 MediaPlayer 进入准备状态
- 调用 start() 方法 开始播放
- 调用 pause() 停止播放
- reset() 停止播放
实例:
class MainActivity : AppCompatActivity() {
private val mediaPlayer = MediaPlayer()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val play: Button = findViewById(R.id.play)
val pause: Button = findViewById(R.id.pause)
val stop: Button = findViewById(R.id.stop)
initMediaPlayer()
play.setOnClickListener {
if (!mediaPlayer.isPlaying) {
mediaPlayer.start()
}
}
pause.setOnClickListener {
if (mediaPlayer.isPlaying) {
mediaPlayer.pause()
} else {
Log.d("main","isPause")
}
}
stop.setOnClickListener {
if (mediaPlayer.isPlaying) {
mediaPlayer.reset()
initMediaPlayer()
}
}
}
private fun initMediaPlayer() {
val assetManager = assets
val fd = assetManager.openFd("music.mp3")
mediaPlayer.setDataSource(fd.fileDescriptor,fd.startOffset,fd.length)
mediaPlayer.prepare()
}
override fun onDestroy() {
super.onDestroy()
Log.d("main","onDestroy")
mediaPlayer.stop()
mediaPlayer.release()
}
}
在onCreate()方法中调用initMediaPlayer()方法,为MediaPlayer对象进行初始化操作。
在initMediaPlayer()方法中。
- 首先通过getAssets()方法得到了一个AssetManager的实例,AssetManager可用于读取assets目录下的任何资源。
- 调用 openFd() 方法将音频文件句柄打开
- 调用 setDataSource() 方法和 prepare(), 为MediaPlayer做好了播放前的准备。
二、播放视频
播放视频文件主要使用 VideoView 类来实现。
VideoView 类常见方法汇总:
实例:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val videoView: VideoView = findViewById(R.id.videoView)
val uri = Uri.parse("android.resource://$packageName/${R.raw.video}")
videoView.setVideoURI(uri)
val play: Button = findViewById(R.id.play)
play.setOnClickListener {
if (!videoView.isPlaying) {
videoView.start()
}
}
val pause: Button = findViewById(R.id.pause)
pause.setOnClickListener {
if (videoView.isPlaying) {
videoView.pause()
}
}
val replay: Button = findViewById(R.id.replay)
replay.setOnClickListener {
if (videoView.isPlaying) {
videoView.resume()
}
}
}
override fun onDestroy() {
super.onDestroy()
val videoView: VideoView = findViewById(R.id.videoView)
videoView.suspend()
}
}
VideoView不支持直接播放assets目录下的视频资源,res目录下允许我们再创建一个raw目录,像诸如音频、视频之类的资源文件也可以放在这里,并且VideoView是可以直接播放这个目录下的
视频资源的,不需要创建类似 assertManager 的资源管理。
我们首先在onCreate()方法中调用了Uri.parse()方法,将raw目录下的video.mp4文件解析成了一个Uri对象,这里使用的写法是Android要求的固定写法。
然后调用VideoView的setVideoURI()方法将刚才解析出来的Uri对象传入,这样VideoView就初始化完成了。