Android制作简易的音乐播放器和视频播放器

制作简易的音乐播放器和视频播放器

播放多媒体文件

  • Android在播放音频和视频方面做了非常不错的支持,它提供了一套非常完整的API,使得开发者可以轻松编写出一个简易的音频或者视频播放器

播放音频

  • 在Android中播放音频文件一般使用MediaPlayer类来进行实现,他对多种格式的音频文件提供了非常全面的控制方法,从而使播放音乐的工作变得十分简单,下表列出了MediaPlayer类中一些较为常用的方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wnKJobu4-1671707953702)(C:/Users/zhengbo/%E6%88%91%E7%9A%84%E5%AD%A6%E4%B9%A0/Typora%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/%E5%AE%89%E5%8D%93/image-20221222164558552.png)]

MediaPlayer的工作流程

  • 首先需要创建一个MediaPlayer对象,然后调用setDataSource()方法设置音频文件的播放路径,再调用prepare()方式使MediaPlayer进入准备状态.
  • 接下来调用start()方法就可以开始播放音频了,再调用pause()方法就会暂停,调用reset()方法就会停止播放.

项目示例

  • 新建一个PlayAudioTest项目,然后修改activity_main.xml当中的代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Button
        android:id="@+id/play"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Play" />

    <Button
        android:id="@+id/pause"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Pause" />

    <Button
        android:id="@+id/stop"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Stop" />


</LinearLayout>
  • 定义了三个按钮分别表示播放,暂停,停止
  • MediaPlayer可以用于播放网络,本地以及应用程序安装包当中的音频,下面的例子来播放程序安装包中的音频.
  • AS允许我们再项目工程中创建一个assets目录,并在这个目录下面存放任意文件和子目录,这些文件和子目录在项目打包的时候会一并被打包到安装文件中,然后我们在程序中就可以借助AssetManager这个类提供的接口对assets目录下的文件进行读取.
  • 下面创建一个assets目录,这个目录必须创建在app/src/main这个目录下面,也就是和java,res这两个目录是平级的,右击app/src/main->new->Directory,再弹出的对话框中输入"assets",目录即可创建完成.
  • 然后准备一份音频资源放在这个目录下面即可
  • 接着修改MainActivity当中的代码逻辑
package com.zb.playaudiotest

import android.media.MediaPlayer
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {
    
    
    private val mediaPlayer = MediaPlayer()
    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()
            }
        }
    }

    override fun onDestroy() {
    
    
        super.onDestroy()
        mediaPlayer.stop()
        mediaPlayer.release()
    }


    /**
     * 为mediaPlayer对象进行初始化
     */
    private fun initMediaPlayer() {
    
    
        val assetManager = assets
        val fd = assetManager.openFd("music.mp3")
        mediaPlayer.setDataSource(fd)
        mediaPlayer.prepare()
    }
}
  • 再类初始化的时候,创建一个MediaPlayer的实例,然后在onCreat()方法中调用initMediaPlayer()方法,为MediaPlayer对象进行初始化
  • 在initMediaPlayer()方法当中首先通过getAssets()方法得到一个AssetManager的实例,Assmanager可以用于读取assets目录下的任何资源,然后调用opedFd()方法将音频文件句柄打开,后面又依次调用了setDataSource()方法和prepare()方法,为mediaPlayer做好了播放前的准备.
  • 然后就是各个按钮的点击事件了,分别对应简单的开始,暂停,停止逻辑
  • 最后在onDestroy()方法中,我们还需要分别调用stop()方法和release()方法,将于MediaPlayer相关的资源释放掉.
  • 这样一个简易的音乐播放器就完成了.

播放视频

  • 播放视频主要使用VideoView类来实现,这个类将视频的显示和控制集于一身,我们仅仅借助它就可以完成一个简单的视频播放器.VideoView的用法和MediaPlayer也比较类似,常用方法如下表所示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zo6MytSJ-1671707953704)(C:/Users/zhengbo/%E6%88%91%E7%9A%84%E5%AD%A6%E4%B9%A0/Typora%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/%E5%AE%89%E5%8D%93/image-20221222174632519.png)]

项目示例

  • 新建一个PlayVideoTest项目,然后修改activity_main.xml文件中的代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <Button
            android:id="@+id/play"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="play" />

        <Button
            android:id="@+id/pause"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="pause" />

        <Button
            android:id="@+id/replay"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="replay" />
    </LinearLayout>

    <VideoView
        android:id="@+id/videoView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />


</LinearLayout>
  • 在这个布局文件当中同样放置了三个按钮,分别用于控制视频的播放,暂停,重新播放,另外在按钮的下面还放置了一个VideoView,稍后的视频就会放在这个地方进行显示.
  • 接下来就是存放视频资源的问题了,很可惜的是在VideoView当中是不支持直接播放assets目录下的视屏资源的,所以只能寻找其他的解决方案了.
  • res目录下面允许我们再创建一个raw目录,像诸如视频,音频之类的文件也可以存放在这里,并且VideoView是可以直接播放这个目录下的视频资源的.
  • 右击app/src/main/res->New->Directory,在弹出的对话框当中输入"raw",完成raw目录的创建,并把要播放的视频资源放在里面即可,需要注意的是在raw下面存放的文件命名中不能有大写字母,否者会爆红.
  • 然后修改MainActivity当中的代码
package com.zb.playvideotest

import android.net.Uri
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {
    
    
    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() //暂停播放
            }
        }
        replay.setOnClickListener {
    
    
            if (videoView.isPlaying) {
    
    
                videoView.resume() //重新播放
            }
        }
    }

    override fun onDestroy() {
    
    
        super.onDestroy()
        videoView.suspend()
    }
}
  • 在onCreat()方法当中,调用了Uri.parse()方法,将raw目录下的video.map文件解析成了Uri对象,这里使用的写法是Android要求的固定写法
  • 然后调用VideoView的setVideoURI()方法将刚才解析出来的Uri对象传入,这样VideoView就初始化完成了.
  • 之后就是各个按钮的点击事件了,最后还要子啊onDestory()方法当中调用一个videoView的suspend()方法,将VideoView所占用的资源释放掉.
  • 这样一个简易的视频播放器就制作完毕了

猜你喜欢

转载自blog.csdn.net/weixin_45809829/article/details/128412537