系统实现与功能测试 - LQF39466/BananaPlayer GitHub Wiki

系统实现


开发/运行环境

开发机环境:Windows 11 处理器:AMD Ryzen 7 4800H 内存:16GB IDE: Android Studio 项目代码语言:JAVA & XML

系统架构简介

系统整体架构和主要模块之间的关系如图所示

463b9241d729610f

系统主要被分为前后端两个大部分,后端主要负责利用 Android 的系统 API 获取音频文件,并对音频文件加以整理。前端则是根据后端提供的数据和部分方法,实现与用户交互相关的功能。

重要模块简介

SongModel

这个类定义了歌曲信息的数据结构,将歌曲文件中的信息封装成对象,并为其属性提供了 getter 和 setter 方法。其各项属性列出如表:

属性 类型 说明
name String 歌曲名字
singer String 作家
path String 路径
duration int 时长
size long 文件大小
isPlaying Boolean 是否正在播放

MusicPlayingHelper

Helper 类是一个后端的工具类,继承自 Android 的 MediaPlayer 类,用于实现音频播放,并为 MainActivity 提供必要的播放控制方法。其主要方法列出如表:

方法名 返回值类型 说明
playBySongModel void 播放音乐
isPlaying Boolean 是否正在播放音乐
onStopTrackingTouch void 监听拖动SeekBar事件
pause void 暂停播放

ScanMusicUtil

这是一个后端的工具类,用于读取用户手机的系统文件,并根据文件扩展名确定音频文件。并为每一个音频文件构建一个 SongModel 数据结构。

MainActivity

这是前端的主 Activity 类,继承自 BaseActivity ,不仅实现了界面上所有点击元素的点击事件、进度条 SeekBar 的拖拽事件,还集成了播放的顺序控制,并通过 Helper 提供的方法实现播放控制。 界面布局绑定 activity_main.xml 文件,使用 Android Studio 的设计工具完成。UI 设计采用三段式布局,顶部 ToolBar + 中间 CardView + 底部 ConstraintLayout。各项包含的功能说明如下:

  • ToolBar: 展示 App 图标及名称,用于刷新歌曲列表的按钮
  • CardView: 以卡片形式展示歌曲列表,数据来源于 ScanMusicUtil 构建的列表
  • ConstraintLayout: 限制式布局方式,集成有所有用于播放控制的组件,支持一定范围内的响应式布局 最终实现的界面如图所示:

Screenshot_20221118-102916_Banana Player

NowPlayingActivty

这是前端的歌曲详情页 Activity 类,继承自 AppCompactActivity ,由 MainActivity 启动,并通过 Intent 传递当前正在播放的歌曲信息,再予以相应的展示。最终实现的界面如图所示:

2

主要功能实现情况

功能名称 功能描述 实现情况
获取系统权限 App 第一次运行时,弹出窗口,提示需要授予文件权限
展示歌曲列表 能够扫描到系统文件中的音频文件,并列出
正常播放音频 点击某一音频,能够正确播放
播放/暂停控制 点击播放/暂停按钮,歌曲能在播放和暂停之间切换,同时按钮的图标也产生相应的变化
上一首/下一首 点击上一首/下一首图标,歌曲能够正常按照播放列表中的顺序切换
循环/单曲/随机切换 点击左侧的播放顺序选择图标,在三种状态中循环切换,同时点击上一首/下一首图标选择歌曲的逻辑也应该产生相应的变化
播放进度实时更新 播放进度条正常展示播放进度,同时文本框内的时长显示也会实时更新
进度条可拖拽 拖拽进度条能进行符合预期的播放控制
详情页展示正常 点击进入歌曲详情页,展示信息正确,并且可以使用系统返回返回主界面

系统测试


测试用例

MainActivity

PlayHelper
用例描述 结果 测试截图
用户点击下一首按钮 歌曲根据播放方式切换为下一首,顺序循环下如果为歌单最后一首则切换为上一首 seekbar
用户点击上一首按钮 歌曲切换为上一首 seekbar
用户点击播放/暂停按钮 歌曲播放状态切换为播放/暂停,如歌曲名称过长超出显示范围,则自动切换为走马灯滚动显示 seekbar
用户点击播放歌曲详情按钮 切换页面,显示正在播放的歌曲详情 details
用户拖动播放条 seekbar 歌曲跳转至对应的位置进行播放 seekbar
正在播放歌曲名显示 如果没有歌曲正在播放,则显示设定好的信息;否则显示正在播放的歌曲名 notingplaying
用户切换播放顺序 图标进行相应改变,并且播放顺序变换为对应的播放逻辑 playmode
getToolBarRightImgClick()
用例描述 结果 测试截图
用户点击右上角刷新按钮 歌曲列表进行刷新 playmode

此外,在播放列表栏中,用户也可以点击想要播放的歌曲,播放器会播放对应的歌曲,并且列表对正在播放的歌曲进行突出显示;

在应用第一次启动时,会申请读取存储等用户权限,如果通过则软件正常使用,如果用户不通过,则会提示软件无法正常使用的信息。

NowPlaying

用例描述 结果 测试截图
本地歌曲文件存放艺人、歌曲名、歌曲时长、歌曲大小、存放路径等信息 正常显示对应信息 details
本地歌曲文件中某信息缺省 显示 details

结果分析

根据测试分析运行的结果,确认软件是否满足需求。

由 MainActivity 中 PlayHelper 的各项分析可知,软件内各个按钮均可以正确响应用户的操作,实现对应的功能。用户能够在操作界面内进行切歌、切换播放/暂停状态、查看正在播放歌曲的详细信息等功能,并且能方便地拖动进度条进行播放进度的调整。应用在进入时会自动从本地存储库中获取多种播放格式,并且刷新歌曲列表。用户如果新添加了歌曲,也可以点击右上角的刷新按钮刷新播放列表。用户也可以根据喜好调整多种播放模式,优化使用体验。

由 MainActivity 中其余部分的各项分析可知,本应用中可以自由刷新播放列表,并且用户能够自由切换播放的歌曲,对于正在播放的歌曲,软件也进行了相应的突出显示,这样人性化的设计优化了用户的使用体验。

在 NowPlaying 界面中,歌曲详情的显示方便了用户了解歌曲的更多信息,并且方便用户在本地查找对应的文件,方便用户进行文件管理。

⚠️ **GitHub.com Fallback** ⚠️