播放音频
在 Android 中播放音频文件一般使用 MediaPlayer 类实现,下表列出 MediaPlayer 类中一些常用的 API
方法名 | 功能描述 |
---|
setDataSource | 设置要播放的音频文件的位置 | prepare | 在调用之前,完成准备工作 | start | 开始播放 | pause | 暂停 | reset | 重置 MediaPlayer 为刚刚创建的状态 | seekTo | 从指定位置播放音频 | stop | 停止播放 | release | 释放 MediaPlayer 相关的资源 | isPlaying | 判断当前 MediaPlayer 是否正在播放音频 | getDuration | 获取文件的时长 |
AndroidStudio 允许我们在项目工程创建一个 assets 目录,并在这个目录下存放任意文件和子目录,这些文件和子目录在项目打包时会一并打包到安装文件中,然后我们在程序中就可以借助 AssetManager 类提供的接口读取 assets 目录下的文件。assets 目录必须创建在 app/src/main 下
修改 MainActivity 中的代码
class MainActivity : AppCompatActivity() {
private val mediaPlayer = MediaPlayer()
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()
mediaPlayer.stop()
mediaPlayer.release()
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
initMediaPlayer()
play.setOnClickListener {
if (!mediaPlayer.isPlaying) {
mediaPlayer.start()
}
}
pause.setOnClickListener {
if (mediaPlayer.isPlaying) {
mediaPlayer.pause()
}
}
stop.setOnClickListener {
if (mediaPlayer.isPlaying) {
mediaPlayer.reset()
initMediaPlayer()
}
}
}
}
播放视频
播放视频文件并不比播放音频复杂,主要使用 VideoView 类实现
方法名 | 功能描述 |
---|
setVideoPath | 设置要播放的视频文件的位置 | start | 开始播放 | pause | 暂停 | resume | 将视频从头开始播放 | seekTo | 从指定位置播放视频 | stop | 停止播放 | suspend | 释放 VideoView 相关的资源 | isPlaying | 判断当前是否正在播放视频 | getDuration | 获取文件的时长 |
VideoView 不支持直接播放 assets 目录下的视频资源,所以要寻找其他解决办法。res 目录下允许我们再创建一个 raw 目录,像诸如音频、视频之类的资源文件也可以放在这里,并且 VideooView 是可以直接播放该目录下的视频资源的
修改 activity_main.xml 中的代码
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
...
<VideoView
android:id="@+id/videoView"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
修改 MainActivity 中的代码
class MainActivity : AppCompatActivity() {
override fun onDestroy() {
super.onDestroy()
videoView.suspend()
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val uri = Uri.parse("android.resource://$packageName/${R.raw.video}")
videoView.setVideoURI(uri)
play.setOnClickListener {
if (!videoView.isPlaying) {
videoView.start()
}
}
pause.setOnClickListener {
if (videoView.isPlaying) {
videoView.pause()
}
}
stop.setOnClickListener {
if (videoView.isPlaying) {
videoView.resume()
}
}
}
}
|