简单音乐播放器的设计与实现 您所在的位置:网站首页 简单介绍音乐 简单音乐播放器的设计与实现

简单音乐播放器的设计与实现

2024-06-11 17:44| 来源: 网络整理| 查看: 265

简单音乐播放器的设计与实现

本文将介绍如何在Andriod Studio设计制作一个简单音乐播放器

功能说明

​ 第二次安卓开发,所以要求相对上次而言难度稍微加大了一点。该程序实现的主要功能有上一曲,下一曲,播放,暂停,退出,进度条拖拽实现音乐播放进度调整。

分析 所需工具

​ Android Studio

设计思路

​ 1.首先,我们设计一个音乐播放器的大致布局如下,大概有五个button,上一曲,下一曲,暂停,播放,退出(因为只做一个项目演示,重在功能,所以在这里我个人比较懒,没有调样式);然后有一个imageview用来存放每一个歌曲对应的背景图片,有三个textview分别用来存放一些必须的歌曲信息以及说明文字,一个textview用来写描述文字为当前进度,然后一个textview用来存储歌曲名,一个在图片顶部,用来展示歌曲名字,另外一个用来现实当前播放进度,大概布局效果如下:(详细设计代码在文末代码仓库链接中,此处不做赘述)

界面布局文件效果展示在这里插入图片描述

​ 2.创建一个文件夹raw文件夹,里面用来存放歌曲,以便程序能够更方便的访问到。

​ 3.在drawable文件夹中,粘贴需要用到的对应歌曲的图标,或者背景图片。

​ 4.在项目包中new一个Service类,在里面重写父类Service的一些重要方法,启动之后长时间工作在后台,配合Activity的调用来控制音乐播放的播放,暂停,进度条控制播放进度等行为。主要控制代码如下:(完整代码底部代码仓库有显示)

@Override public int onStartCommand(Intent intent, int flags, int startId) { super.onStartCommand(intent, flags, startId); //用来对传递过来的消息类型做一个判断,然后对于指定的类型做指定的工作 switch (intent.getIntExtra("type",-1)){ //播放 case 1: mediaPlayer.start(); break; //暂停 case 2: mediaPlayer.pause(); break; case 3: //先重置播放器,然后设置下一首歌曲,这里采取循环加1的方式 mediaPlayer.reset(); now=(++now)%musicid.length; mediaPlayer=MediaPlayer.create(getApplicationContext(),musicid[now]); mediaPlayer.start(); break; //先重置播放器,然后设置上一首歌曲,这里采取循环减1的方式 case 4: mediaPlayer.reset(); now=(--now)%musicid.length; mediaPlayer=MediaPlayer.create(getApplicationContext(),musicid[now]); mediaPlayer.start(); break; } return START_STICKY; }

​ 5.在MainActivity里面编写代码,(由于代码仓库有完整的代码,所以在下面我只介绍一些关键代码。)用来控制整个程序的运行。

​ 首先定义一个内部类MyServiceConnection实现默认的ServiceConnection,然后在方法中实现myBinder用来获取当前Service对象

class MyServiceConnection implements ServiceConnection{ @Override public void onServiceConnected(ComponentName name, IBinder service) { //初始化myBinder myBinder=(MyService1.MyBinder) service; } @Override public void onServiceDisconnected(ComponentName name) { } }

​ 本程序中要实现歌曲播放的时候实时更新进度条,必须定义一个线程用来控制进度条的更新,Thread.sleep(1000);用来设置线程睡眠1s(1秒更新执行一次后续代码,即传递消息,以便实现进度条实时更新)代码如下:

class MyThread1 extends Thread { public void run() { while (true) { try { Thread.sleep(1000); Message msg = new Message(); msg.what = 0x123; handler.sendMessage(msg); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } public Handler handler=new Handler(Looper.getMainLooper()){ @Override public void handleMessage(@NonNull Message msg) { if(msg.what==0x123){ // MyService1.MyBinder myBinder1=(MyService1.MyBinder) myBinder; duration=myBinder.getMyService().Duration(); currentPosition=myBinder.getMyService().CurrentPosition(); int musicimage=myBinder.getMyService().getNowImage(); String musicname=myBinder.getMyService().getNowName(); //更新进度条和text1的内容 Update(currentPosition,duration); //静态方法只执行一次 init(musicimage,musicname); } } };

​ 给seekBar设置一个setOnSeekBarChangeListener用来控制,实现拖动进度条调整播放进度,加上一个if(formUser)十分关键,用来判断是否是用户操作,如果是就执行,亲测可以很好的解决拖动卡顿的问题,代码如下:

seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { //判断是不是用户操作,如果是就执行下列代码,可以很好的解决的卡顿问题 if(fromUser){ myBinder.getMyService().seekTo(progress); } } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { //根据拖动的进度改变音乐播放进度 int progress=seekBar.getProgress();//获取seekBar的进度 myBinder.getMyService().seekTo(progress);//改变播放进度 } });

​ 其它五个按钮的实现相对来说比较好实现(上一曲,下一曲,播放,暂停,退出),这里就不做赘述,以上就是全部对简单音乐播放器实现与开发的分析。如果还有什么疑问,可参照去下载文末所给的代码仓库下载并查看所有代码。如果还有疑问欢迎qq交流。

效果展示动态图在这里插入图片描述

gitee代码仓库下载地址:https://gitee.com/flaydog/MyService1.git



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有