数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 143|回复: 10

[安卓] 当下的手机app生态就是一个乱,写了个不联网的音乐播放器

[复制链接]
发表于 昨天 03:22 | 显示全部楼层 |阅读模式
本帖最后由 十二江哥 于 2026-4-18 17:22 编辑

手机里有一些自己常听的MP3文件,每次打开播放软件那是一个糟心。。。即使原厂自带的播放器也引流到QQ音乐之类的,会员试听什么的,乱七八糟!

进个电梯断网音乐还停了,这是真忍不了。我本地播放关你5G鸟事啊?

于是让 Trae 写代码, AndroidStudio 打包为apk (其实还用上了DS,现炒现卖怎么使用AndroidStudio )。

一番折腾后,自己的专属音乐播放器就欧克了。

本来目录里有歌词的,也有歌曲的封面,AI没给搞定,先这样吧,中文歌也不是非要看歌词。

apk 大概率被手机识别为不安全,胆大的可以下载,有点基础的自己去和AI较劲吧。

我只保证AI生成的代码我一个字符没改(其实是一行都没看,实在是看不懂JAVA),建议用旧手机先试水。

虽然说一行代码都不看,但还是收获到软件架构方面的技能。比如之前一直吐槽某些播放器列表里面还有已经删除的文件,直到自己做才发现问题不简单。。。

下面是一番改进后,功能比较完善了,让AI自己写的检讨(同样我也看不懂,留个纪念而已):

  1. # 音乐播放器开发错误总结
  2. ## 1. 功能实现错误
  3. ### 1.1 歌曲播放问题
  4. - 错误 :点击歌曲时播放的是列表中的第一首歌,而非点击的歌曲
  5. - 原因 :MainActivity中提前调用 playerManager.setPlaylist() 但未传递起始索引
  6. - 修复 :移除了MainActivity中提前设置播放列表的代码,让PlayerActivity处理播放列表设置
  7. ### 1.2 播放界面无响应
  8. - 错误 :修复选曲问题后,播放界面00:00不走,不播放音乐
  9. - 原因 :PlayerActivity中 bindService() 是异步操作,但代码立即调用 loadPlaylist() ,此时服务未绑定
  10. - 修复 :在MusicPlayerManager中添加服务绑定后自动播放的逻辑
  11. ### 1.3 目录导航问题
  12. - 错误 :返回上一级目录需要按两次才能生效
  13. - 原因 : goBack() 方法立即修改 folderStack ,但UI更新是异步的,导致状态不同步
  14. - 修复 :重构导航逻辑,在协程开始前计算 canGoBack 值,确保状态一致性
  15. ### 1.4 分批加载功能
  16. - 错误 :首次打开目录很慢,需要等待全部加载完成
  17. - 原因 :MusicRepository扫描目录时提取所有歌曲元数据,耗时较长
  18. - 修复 :实现分批加载,先加载文件夹和前25首歌曲,1秒后加载剩余歌曲
  19. ### 1.5 歌词功能
  20. - 错误 :播放有LRC文件的歌曲时,歌词区域为空
  21. - 原因 :
  22.   - LRC文件查找逻辑有问题
  23.   - 未处理文件名中的特殊字符
  24.   - 未在歌词区域显示"找不到歌词文件"提示
  25. - 修复 :
  26.   - 改进 findLrcFile 方法,支持多种查找方式
  27.   - 添加URL解码支持,处理特殊字符
  28.   - 添加"找不到歌词文件"提示
  29. ## 2. 编译错误
  30. ### 2.1 方法重载冲突
  31. - 错误 : Overload resolution ambiguity
  32. - 原因 :MusicRepository中存在两个同名的 scanFolder 方法
  33. - 修复 :将方法名从 scanFolder 改为 scanFolderInternal ,避免冲突
  34. ### 2.2 未解决的引用
  35. - 错误 : Unresolved reference: Uri
  36. - 原因 :MainActivity.kt文件只剩下一个方法,缺少包声明和导入语句
  37. - 修复 :恢复完整的MainActivity.kt文件,添加必要的导入语句
  38. ### 2.3 协程作用域问题
  39. - 错误 : Unresolved reference. None of the following candidates is applicable because of receiver type mismatch
  40. - 原因 : async 函数需要在 CoroutineScope 中调用
  41. - 修复 :使用 coroutineScope 包装 async 调用
  42. ### 2.4 不存在的常量
  43. - 错误 : Unresolved reference: COLUMN_URI
  44. - 原因 :使用了不存在的 DocumentsContract.Document.COLUMN_URI
  45. - 修复 :使用 DocumentFile API替代,避免使用不存在的常量
  46. ## 3. UI/UX问题
  47. ### 3.1 子目录样式
  48. - 错误 :子目录样式与歌曲列表不一致,背景色不是黄色
  49. - 修复 :修改 item_folder.xml ,使用 MaterialCardView ,设置黄色背景,与歌曲列表保持一致
  50. ### 3.2 列表布局
  51. - 错误 :歌曲名和artist在不同行显示
  52. - 修复 :修改 item_music.xml ,使用水平LinearLayout,歌曲名占75%宽度,artist占25%宽度
  53. ### 3.3 歌词显示
  54. - 错误 :找不到歌词文件时歌词区域为空
  55. - 修复 :添加 showNoLyricsMessage() 方法,显示"找不到歌词文件"提示
  56. ## 4. 性能优化
  57. ### 4.1 目录扫描速度
  58. - 错误 :首次打开目录很慢
  59. - 修复 :
  60.   - 实现缓存机制,首次扫描后保存结果到缓存文件
  61.   - 再次打开时直接从缓存读取,无需重新扫描
  62.   - 添加手动刷新按钮,支持强制更新
  63. ### 4.2 元数据提取
  64. - 错误 :提取所有歌曲元数据导致卡顿
  65. - 修复 :
  66.   - 在后台线程提取元数据
  67.   - 只提取当前播放歌曲的元数据,而非所有歌曲
  68.   - 使用协程和Dispatchers.IO执行耗时操作
  69. ## 5. 技术栈应用
  70. ### 5.1 协程使用
  71. - 错误 :未正确使用协程,导致主线程阻塞
  72. - 修复 :
  73.   - 使用 lifecycleScope.launch 启动协程
  74.   - 使用 Dispatchers.IO 执行耗时操作
  75.   - 使用 withContext(Dispatchers.Main) 更新UI
  76. ### 5.2 SAF (Storage Access Framework)
  77. - 错误 :未正确使用SAF API,导致文件访问失败
  78. - 修复 :
  79.   - 使用 DocumentFile.fromTreeUri 和 DocumentFile.fromSingleUri
  80.   - 正确处理URI路径和文件访问
  81. ### 5.3 元数据提取
  82. - 错误 :未提取MP3文件中的艺术家信息
  83. - 修复 :
  84.   - 使用 MediaMetadataRetriever 提取元数据
  85.   - 处理元数据不存在的情况,使用默认值
  86. ## 6. 总结
  87. 通过解决这些问题,音乐播放器现在具备以下功能:

  88. - 点击歌曲时正确播放所选歌曲
  89. - 快速加载目录,支持分批显示
  90. - 显示MP3文件中的艺术家信息
  91. - 支持LRC歌词显示,5行滚动效果
  92. - 找不到歌词时显示明确提示
  93. - 缓存机制提高目录打开速度
  94. - 统一的UI样式,子目录与歌曲列表保持一致
  95. - 顺畅的目录导航体验
  96. 这些修复过程展示了如何在Android开发中解决常见的功能实现、编译错误和性能优化问题,以及如何正确应用协程、SAF等现代Android技术。
复制代码




附图1: 三五个回合后,基本可用的样子


附图2: 继续死磕,灭掉各种报错后的样子






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
发表于 昨天 06:16 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 昨天 07:34 来自手机浏览器 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 昨天 08:20 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 昨天 08:26 来自手机浏览器 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 昨天 08:27 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 昨天 09:12 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 昨天 09:26 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 昨天 11:36 | 显示全部楼层
游客请登录后查看回复内容

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
回复 支持 反对

使用道具 举报

发表于 昨天 17:00 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

 楼主| 发表于 昨天 17:15 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 微信登录

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2026-4-19 00:13 , Processed in 0.124801 second(s), 13 queries , Gzip On, Redis On.

Powered by Discuz!

© MyDigit.Net Since 2006

快速回复 返回顶部 返回列表