SelfMusic – Android 音乐播放器项目
本文最后更新于156 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com

这是一个功能完整的 Android 音乐播放器应用,采用 Java 开发,使用 SQLite 本地数据库存储用户数据和收藏信息。

 主要功能模块

1. 用户认证系统

功能:

  • 用户注册
  • 用户登录
  • 当前登录用户状态管理

实现方式:

  • UserDao.java: 数据访问层,使用 SQLite 存储用户信息
    • register(): 检查用户名是否存在,不存在则插入到 tb_user 表
    • login(): 查询用户名和密码匹配的记录
    • getByUsername(): 根据用户名查询用户
  • CurrentUserUtils: 静态工具类,保存当前登录用户的 ID(使用 SharedPreferences)
  • LoginActivity.java: 登录界面
    • 验证用户输入
    • 调用 UserDao.login() 进行登录验证
    • 登录成功后跳转到 MainActivity 并清空任务栈
  • RegisterActivity.java: 注册界面
    • 调用 UserDao.register() 创建新用户

2. 音乐播放核心功能

功能:

  • 播放/暂停音乐
  • 上一首/下一首切换
  • 进度条拖动
  • 后台播放服务

实现方式:

  • MusicService.java: 后台音乐播放服务
    • 继承 Service,通过 Binder 机制与 Activity 通信
    • 使用 MediaPlayer 播放 assets 目录下的 MP3 文件
    • 使用 Timer 每 500ms 更新一次播放进度
    • 实现自动播放下一首(OnCompletionListener
    • 支持播放控制方法:
      • play(Music): 播放指定音乐
      • pausePlay(): 暂停
      • continuePlay(): 继续播放
      • next() / previous(): 切歌
      • seekTo(int): 跳转到指定位置
  • 监听器模式:
    • 定义 OnMusicServiceListener 接口
    • 回调方法:
      • onTimerTask(): 通知播放进度更新
      • onMusicChange(): 通知歌曲切换

3. 音乐库管理

功能:

  • 显示所有歌曲列表
  • 按歌手分类浏览
  • 搜索和筛选

实现方式:

  • AssetsMusicData.java: 音乐数据管理(单例模式)
    • 从 assets/music/ 目录读取 MP3 文件
    • 解析文件名格式:歌手-歌名.mp3
    • 从 assets/picture/ 加载歌手封面图片
    • 自动获取音乐时长(使用 MediaPlayer)
    • 随机打乱歌曲顺序(Collections.shuffle()
  • SongsFragment.java: 歌曲列表页面
    • 使用 RecyclerView + MusicAdapter 显示歌曲
    • 点击列表项播放音乐
    • 点击爱心图标收藏/取消收藏
  • ArtistsFragment.java: 歌手分类页面
    • 按歌手分组显示
    • 点击歌手查看该歌手的所有歌曲

4. 收藏功能

功能:

  • 收藏/取消收藏歌曲
  • 查看收藏列表
  • 收藏状态持久化

实现方式:

  • FavoriteDao.java: 收藏数据访问层
    • SQLite 表:tb_favorite(user_id, music_id, create_time)
    • 方法:
      • addFavorite(): 添加收藏记录
      • cancelFavorite(): 删除收藏记录
      • toggleFavorite(): 切换收藏状态
      • getFavoriteList(): 获取用户收藏列表
      • isFavorite(): 判断是否已收藏
      • updateFavoriteStatus(): 批量更新歌曲收藏状态
  • FavoritesFragment.java: 收藏页面
    • 调用 FavoriteDao.getFavoriteList() 获取收藏列表
    • 展示用户收藏的所有歌曲

5. 播放器界面

功能:

  • 全屏播放器界面
  • 显示专辑封面、歌曲信息
  • 进度条显示和拖动
  • 播放控制按钮
  • 收藏按钮

实现方式:

  • PlayerActivity.java: 播放器全屏页面
    • 绑定 MusicService 获取播放状态
    • 实现 OnMusicServiceListener 接口:
      • onTimerTask(): 更新进度条和时间显示
      • onMusicChange(): 更新歌曲信息和收藏状态
    • SeekBar 拖动监听:调用 musicControl.seekTo() 跳转播放位置
    • 收藏按钮:调用 FavoriteDao.toggleFavorite()

6. 主界面架构

实现方式:

  • MainActivity.java: 主界面容器
    • 使用 ViewPager2 + BottomNavigationView 实现页面切换
    • 三个主标签页:
      1. 音乐库 (MusicLibraryFragment) – 包含歌曲列表和歌手列表
      2. 收藏 (FavoritesFragment)
      3. 设置 (SettingsFragment)
    • 底部常驻播放控制栏:
      • 显示当前播放歌曲信息
      • 播放/暂停按钮
      • 下一首按钮
      • 点击跳转到 PlayerActivity

🗄️ 数据库设计

SQLite 数据库表:

tb_user(用户表)

  • id (Long, 主键)
  • username (String)
  • password (String)

tb_favorite(收藏表)

  • id (Long, 主键)
  • user_id (Long, 外键)
  • music_id (Long, 外键)
  • create_time (时间戳,按收藏时间排序)

🎨 技术栈和依赖

  • Android SDK: API 24-36
  • UI 框架:
    • Material Design Components
    • ViewPager2
    • RecyclerView
    • BottomNavigationView
  • 第三方库:
    • com.gzone.university:expand:1.4.0 – UI 工具库(包含 GlideUtils 图片加载)
    • me.jessyan:autosize:1.2.1 – 屏幕自适应

📂 目录结构

app/src/main/
├── assets/ # 资源文件
│ ├── music/ # MP3 音乐文件
│ └── picture/ # 歌手封面图片
├── java/com/example/selfmusic/
│ ├── dao/ # 数据访问层
│ │ ├── UserDao.java
│ │ └── FavoriteDao.java
│ ├── entity/ # 实体类
│ │ ├── User.java
│ │ ├── Music.java
│ │ └── Singer.java
│ ├── service/ # 服务
│ │ └── MusicService.java
│ ├── ui/ # 界面层
│ │ ├── activity/ # Activity
│ │ │ ├── LoginActivity.java
│ │ │ ├── RegisterActivity.java
│ │ │ ├── MainActivity.java
│ │ │ ├── PlayerActivity.java
│ │ │ └── AboutActivity.java
│ │ ├── adapter/ # 适配器
│ │ │ ├── MusicAdapter.java
│ │ │ └── SingerAdapter.java
│ │ └── fragment/ # Fragment
│ │ ├── SongsFragment.java
│ │ ├── ArtistsFragment.java
│ │ ├── FavoritesFragment.java
│ │ ├── MusicLibraryFragment.java
│ │ └── SettingsFragment.java
│ ├── common/ # 公共类
│ │ ├── Result.java # 统一返回结果封装
│ │ └── AssetsMusicData.java
│ └── utils/ # 工具类
│ ├── SqliteUtils.java # 数据库工具
│ └── CurrentUserUtils.java

🔄 关键流程

音乐播放流程:

  1. 用户点击歌曲列表项
  2. SongsFragment 调用 musicControl.play(music)
  3. MusicService 使用 MediaPlayer 加载 assets 中的 MP3 文件
  4. 开始播放并启动 Timer 更新进度
  5. 通过监听器回调更新所有相关 UI(MainActivity、PlayerActivity)

收藏流程:

  1. 用户点击收藏按钮
  2. 调用 FavoriteDao.toggleFavorite(userId, musicId)
  3. 查询当前收藏状态,执行添加或删除操作
  4. 更新数据库并返回新的收藏状态
  5. UI 更新收藏图标

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇