Kotlin面向对象开发实验:实现简单的音乐播放器

2023-04-2419:50:36编程语言入门到精通Comments2,019 views字数 3333阅读模式

01文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/37079.html

实验目的文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/37079.html

1.理论知识文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/37079.html

  • 掌握Kotlin面向对象的软件开发方面的基础知识。
  • 巩固前期Activity、UI控件的使用。
  • 掌握Service和BroadcastReceiver的特点及用法。 

2.专业技能文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/37079.html

  • 熟悉Android软件开发环境并掌握具体的工具的使用。
  • 掌握Service和BroadcastReceiver组件的使用。
  • 掌握移动应用软件分析和设计方法,并能将其运用到工程实践当中。

3.职业素养文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/37079.html

  • 逐步形成系统的设计的思想,具有一定的创新精神。
  • 养成良好的编程习惯。

02文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/37079.html

实验内容文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/37079.html

根据Service及BroadcastReceiver的知识讲解和案例使用,实现一个Android音乐播放器,强化对服务与广播的理解。要求能实现音乐的播放,暂停,上一首,下一首等功能。要求:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/37079.html

  • 巩固Android应用开发工具(Eclipse或者Android Studio)的常规用法;
  • 巩固Activity、UI控件的常规用法;
  • 掌握Service和BroadcastReceiver的编程要点;
  • 理解MediaPlayer的使用。

03文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/37079.html

实验步骤文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/37079.html

1、页面布局

先考虑下简单音乐播放器的元素,那肯定是播放暂停停止,上一首和下一首了。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/37079.html

Kotlin面向对象开发实验:实现简单的音乐播放器文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/37079.html

父布局是RelativeLayout,然后是ListView显示歌单,接下去就是Button。布局没什么需要细讲的,都过于基础。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/37079.html

2、音乐服务文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/37079.html

其实播放音乐只需要MediaPlayer和start、resume等方法就行,几行代码解决。但Service越来越需要音乐播放器来体现出来,作为四大组件之一,Service从来不露脸,借助Activity来发挥自己的才能。是四大组件里面和Content Provider一样低调的人。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/37079.html

首先定义mediaPlayer对象。然后重写 onCreate()方法,在里面给mediaPlayer初始化和initMediaPlayer(),init的方法中就是打开assets文件夹下的音乐,调用setDataSource()设置数据源,然后prepare()准备就绪。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/37079.html

private lateinit var mediaPlayer:MediaPlayerprivate var index = 0override fun onCreate() {    super.onCreate()    mediaPlayer = MediaPlayer()    initMediaPlayer()}
fun initMediaPlayer() {    val assetManager = assets    var fileName = "music" + index + ".mp3"    var fd = assetManager.openFd(fileName)    mediaPlayer.setDataSource(fd.fileDescriptor, fd.startOffset, fd.length)    mediaPlayer.prepare()}

既然要通过Service实现音乐服务,那么就要控制音乐播放,在MusicService类中定义一个内部类MusicControl。它继承自Binder,里面只有成员方法,而且都没有返回值,其实就是对mediaplaer的方法进行了封装。start()、pause()、reset(),全局变量index是歌曲下标,在切换上下首时调用。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/37079.html

inner class MusicControl:Binder() {        fun playMusic() {            if (!mediaPlayer.isPlaying) {                mediaPlayer.start()            }        }        fun pasueMusic() {            if (mediaPlayer.isPlaying) {                mediaPlayer.pause()            }        }        fun stopMusic() {            if (mediaPlayer.isPlaying) {                mediaPlayer.reset()                initMediaPlayer()            }        }        fun prePlay() {            // 循环播放前一首            index = (index + 5) % 6            // 如果正在播放则重置播放器            if (mediaPlayer.isPlaying) {                mediaPlayer.reset()            }            initMediaPlayer()            mediaPlayer.start()        }        fun nextPlay() {            // 循环播放下一首            index = (index + 7) % 6            // 如果正在播放则重置播放器            if (mediaPlayer.isPlaying) {                mediaPlayer.reset()            }            initMediaPlayer()            mediaPlayer.start()        }    }

3、音乐播放

创建适配器,使用默认的simple_list_item_1,显示一行歌曲名就行。如果你想自定义加上其他的歌曲元素,可以自己创建一个适配器和子项布局文件。这里讲解的重点是Service和Activity进行绑定。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/37079.html

override fun onCreate(savedInstanceState: Bundle?) {    super.onCreate(savedInstanceState)    binding = ActivityMainBinding.inflate(layoutInflater)    setContentView(binding.root)    val adapter = ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, musicList)    binding.lvMusic.adapter = adapter    // 定义意图对象,绑定服务自动创建    musicIntent = Intent(this, MusicService::class.java)    bindService(musicIntent, musicConnection, BIND_AUTO_CREATE)    initView()}

首先MainActivity里面还需要定义个内部类MusicConnection,用于连接MusicService的内部类,继承自ServiceConnection,重写的分类方法中只是在连接上服务的时候将iBinder赋值给musicControl。这里musicControl就是MusicService的内部类对应的对象。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/37079.html

lateinit var musicControl:MusicService.MusicControl
inner class MusicConnection:ServiceConnection {    override fun onServiceConnected(p0: ComponentName?, p1: IBinder?) {        musicControl = p1 as MusicService.MusicControl    }    override fun onServiceDisconnected(p0: ComponentName?) {
    }}

下面我们就用初始化好的MusicConnection对象来连接MainActivity和MusicService。很简单的两句就好了。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/37079.html

musicIntent = Intent(this, MusicService::class.java)bindService(musicIntent, musicConnection, BIND_AUTO_CREATE)

下面我们设置下按钮的点击事件,其实就是直接调用musicControl对象的方法。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/37079.html

override fun onClick(p0: View?) {      when(p0?.id) {          R.id.btn_start->{              musicControl.playMusic()          }          R.id.btn_pause->{              musicControl.pasueMusic()          }          R.id.btn_stop->{              musicControl.stopMusic()          }          R.id.btn_pre->{              musicControl.prePlay()          }          R.id.btn_next->{              musicControl.nextPlay()          }      }}

04文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/37079.html

运行演示文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/37079.html

打开就是主页面,点击开始播放,从第一首开始,然后可以暂停播放,再点开始播放就是继续播放,随时停止播放,上一首和下一首也无比流畅。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/37079.html

Kotlin面向对象开发实验:实现简单的音乐播放器文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/37079.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/ymba/37079.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定