Android 播放多媒体文件:音乐和视频

一、播放音乐

播放音乐主要是使用 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就初始化完成了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值