Repository navigation
Releases: SadEggs/musicwindow
Release list
v1.0.1 正式版
音乐悬浮条 v1.0.1 正式版 · FloatingMusicBar 1.0.1
这一版修的是名字:英文界面下,系统里(桌面图标名、应用信息页、安装界面)以前仍显示中文
「音乐悬浮条」。
- 英文应用名改为 FloatingMusicBar
- App 内选择的语言现在会同步给系统(Android 13+)—— 桌面图标名、应用信息页、安装界面
都会跟着 App 的语言设置变;Android 12 及以下跟随系统语言(系统限制,App 无法改变)
功能与 v1.0 完全相同,下面是 1.0 的能力回顾。
v1.0 的核心:随机播放由 App 自己完成
播放器自己的队列能覆盖多大范围,是播放器说了算。实测 Poweramp 从文件夹播放时只播本层,
子文件夹的歌不会进队列,而且它不公开自己的播放队列 —— 所以没有任何 MediaSession 接口能把
「一整棵树 + 随机」交给播放器。
做法:App 自己当随机引擎 —— 点歌时 App 自己排出整棵树的队列,一首一首交给播放器,
盯着进度在曲末接下一首。代价是每首之间约 0.3~1 秒的空隙,换来完整的随机范围和队列位置。
面板四个开关(点一下切换,都会记住)
| 开关 | 打开 | 关闭 |
|---|---|---|
| 🔀 随机 / ➡ 顺序 | App 自己洗牌随机播放 | 按文件夹原本顺序,走完从头再来 |
| 含子文件夹 / 仅本层 | 范围含所有子文件夹 | 只在本层歌曲里 |
| 🔂 单曲循环 | 点歌就一直重复这一首,直到切换模式 | 正常播放 |
| 点歌带队列 | 点歌时这首歌是整个队列的第一首(效果同「▶ 全部」,只是从这首开始) | 只播这一首 |
悬浮窗上方显示 X/XX:当前是队列第几首、共几首。
适配情况
- 为 Poweramp 适配并实测(本项目的开发目标就是它)
- 基于通用 Android MediaSession,其他规范实现的播放器(VLC、网易云、QQ 音乐等)
理论上同样可用,但没有实机验证过,欢迎反馈测试结果
下载与安装
- 下载
app-release.apk(约 106 KB,不是app-debug.apk) - v0.5 起所有版本同一签名,可直接覆盖安装
- 提示「应用未安装 / 包无效」时:先核对文件大小、换系统浏览器重下、或先卸载旧版
需要哪些权限
悬浮窗权限、通知使用权(必须);忽略电池优化(建议);音乐和音频(面板需要)。
不写任何 m3u 文件,不需要「所有文件访问」。
已知限制
- App 自己排歌时每首之间约 0.3~1 秒空隙(播放器无法被要求无缝接歌)
- 悬浮条的矩形范围会吃掉触摸(Android 悬浮窗固有限制),可折叠/停靠/调低不透明度
- App 完全不碰播放器自己的随机开关(Poweramp 的随机是循环切换、无法读取)
- 部分游戏会主动隐藏所有悬浮窗(
setHideOverlayWindows/ 反外挂),无解
作者与授权
- 原作者 / 需求:SadEggs — https://github.com/SadEggs
- 代码编写:DeepSeek V4 Flash(人提需求 → AI 写代码 → GitHub Actions 云端编译)
- 授权:MIT —— 可自由编译、修改、发布,请署名原作者并保留 LICENSE
v1.0 正式版
音乐悬浮条 v1.0 正式版 · FloatingMusicBar 1.0
给平板用的横条状半透明音乐悬浮窗:全屏游戏时浮在游戏上层,不抢焦点、不挡操作。
3 cm 厚的细条显示封面、歌名、进度和上一曲 / 播放暂停 / 下一曲,点文件夹按钮展开面板直接点歌。
1.0 的核心:随机播放由 App 自己完成
播放器自己的队列能覆盖多大范围,是播放器说了算。实测 Poweramp 从文件夹播放时只播本层,
子文件夹的歌不会进队列,而且它不公开自己的播放队列 —— 所以没有任何 MediaSession 接口能把
「一整棵树 + 随机」交给播放器。(早期版本试过把树写成 .m3u,行不通:Poweramp 会把 m3u
当成一首歌报「播放失败」跳过。)
1.0 的做法:App 自己当随机引擎 —— 点歌时 App 自己排出整棵树的队列,一首一首交给播放器,
盯着进度在曲末接下一首。代价是每首之间约 0.3~1 秒的空隙,换来完整的随机范围和队列位置。
面板四个开关(点一下切换,都会记住)
| 开关 | 打开 | 关闭 |
|---|---|---|
| 🔀 随机 / ➡ 顺序 | App 自己洗牌随机播放 | 按文件夹原本顺序,走完从头再来 |
| 含子文件夹 / 仅本层 | 范围含所有子文件夹 | 只在本层歌曲里 |
| 🔂 单曲循环 | 点歌就一直重复这一首,直到切换模式 | 正常播放 |
| 点歌带队列 | 点歌时这首歌是整个队列的第一首(效果同「▶ 全部」,只是从这首开始) | 只播这一首 |
悬浮窗上方显示 X/XX:当前是队列第几首、共几首。
这一版修好的问题
- 点歌不随机、只有「▶ 全部」有效:早期版本存下的
tree_play=false一直留在设备里,
而点歌路径检查了它 —— 现在这个隐藏开关彻底删除,点歌行为只由面板上看得见的按钮决定 - 英文界面仍有中文:服务是长驻的,切语言后悬浮窗、面板、通知仍用旧语言;
现在切换语言会实时重建悬浮条、面板和通知 - 面板不再平铺子文件夹里的歌,改为在子文件夹行显示「名字 · N 首」
下载与安装
- 下载下面的
app-release.apk(约 105 KB,不是app-debug.apk) - v0.5 起所有版本同一签名,可直接覆盖安装
- 提示「应用未安装 / 包无效」时:先核对文件大小、换系统浏览器重下、或先卸载旧版
需要哪些权限
悬浮窗权限、通知使用权(必须);忽略电池优化(建议);音乐和音频(面板需要)。
1.0 不再写任何 m3u 文件,不需要「所有文件访问」。
已知限制
- App 自己排歌时每首之间约 0.3~1 秒空隙(播放器无法被要求无缝接歌)
- 悬浮条的矩形范围会吃掉触摸(Android 悬浮窗固有限制),可折叠/停靠/调低不透明度
- App 完全不碰播放器自己的随机开关(Poweramp 的随机是循环切换、无法读取,帮它按只会改掉你的档位)
- 部分游戏会主动隐藏所有悬浮窗(
setHideOverlayWindows/ 反外挂),无解
作者与授权
- 原作者 / 需求:SadEggs — https://github.com/SadEggs
- 代码编写:DeepSeek V4 Flash(人提需求 → AI 写代码 → GitHub Actions 云端编译)
- 授权:MIT —— 可自由编译、修改、发布,请署名原作者并保留 LICENSE
v0.29 (测试版 / beta)
测试版 / Test build
新增两个开关(面板头部,点一下切换,会记住)
🔂 单曲循环 / 不循环
- 开到「单曲循环」后,点某一首歌就一直重复这一首,直到你切换成别的模式(点「▶ 全部」,或改别的开关)
- 为了不把每遍结尾切掉,这个模式下的切歌点推到了曲末前 0.3 秒(普通切歌是 1.5 秒)
点歌带队列 / 点歌只放这首
- 点歌带队列(默认,和以前一样):点某一首歌,这首歌就是整个队列的第一首,效果同「▶ 全部」
- 随机模式:后面接随机顺序(含不含子文件夹看第二个开关)
- 顺序模式:后面接文件夹原本顺序 —— 从这首歌往后排,排到末尾再回到前面那些(不是跳回第一首重来)
- 点歌只放这首:只播这一首,不再生成队列
三个开关组合起来的效果
| 单曲循环 | 点歌带队列 | 点某一首歌的结果 |
|---|---|---|
| 开 | 任意 | 只重复这一首(其它开关此时不生效) |
| 关 | 开 | 这首歌 + 整个队列(随机或顺序,看模式与子文件夹开关) |
| 关 | 关 | 只播这一首 |
「▶ 全部」不受「点歌带队列」影响,始终按模式和子文件夹开关播放整个范围。
下载
app-release.apk(附件里的大约 105.6 KB)。若提示「包无效」,请核对大小、用系统浏览器重下、或先卸载旧版。
署名
作者 SadEggs,MIT 许可。
v0.28 (测试版 / beta)
测试版 / Test build
修掉「点歌不随机、只有『▶ 全部』好使」的根因
你的症状(「▶ 全部」有效、点歌无效)暴露了一个残留设置:
早期版本里那个设置项「点一首歌也按整个文件夹树播放」默认是关闭的,你当时打开过设置页,它就把 tree_play=false 存进了设备。此后升级虽然把默认值改成开启,但存下来的 false 一直在,而点歌的随机入口正好检查这个值 → 于是引擎永远不启动,屏幕上没有任何提示。
而「▶ 全部」从来没检查过这个值,所以它一直好用 —— 完全对得上你的观察。
这个隐藏开关已经删掉了:现在点歌的含义只由面板上那两个看得见的按钮决定。
面板新增第二个开关:含子文件夹 / 仅本层
| 开关 | 作用 |
|---|---|
| 含子文件夹(默认) | 随机/播放的范围 = 当前文件夹及其下面所有子文件夹 |
| 仅本层 | 只在当前文件夹自己的歌曲里随机/顺序播放 |
它有自己的存储键,任何旧版本存下的值都不会影响它,默认开启(= 你之前「▶ 全部」的行为)。
现在的完整行为
随机模式(🔀)
- 「▶ 全部」= 当前文件夹(含/不含子文件夹,看第二个开关)随机播放
- 点某一首歌 = 这首歌成为随机队列的第一首
- 在大文件夹点 → 大文件夹范围(第二个开关决定是否含子文件夹)
- 在子文件夹点 → 该子文件夹范围的歌
- 即使已有随机在跑,点歌也会重新开始随机
顺序模式(➡)
- 「▶ 全部」= 按文件夹原本顺序依次播放(走完从头再来)
- 点某一首歌 = 只播这一首(会停掉正在跑的随机)
下载
app-release.apk,大小 105,824 字节(约 103.3 KB)。若提示"包无效",请核对大小、用系统浏览器重下、或先卸载旧版。
署名
作者 SadEggs,MIT 许可。
v0.27 (测试版 / beta)
测试版 / Test build
面板新增「🔀 随机 / ➡ 顺序」开关(点一下切换,会记住)
随机模式
- 「▶ 全部」= 在当前文件夹的整棵树(含子文件夹)里随机播放
- 点某一首歌 = 这首歌成为随机队列的第一首
- 在大文件夹点 → 队列 = 大文件夹下所有歌(含子文件夹)
- 在子文件夹点 → 队列 = 该子文件夹下所有歌
- 这一条现在在整树随机已经在跑的时候也生效(之前的问题:引擎在跑时点歌只播那一首,不重开随机,所以你会觉得"随机出问题了")
顺序模式
- 「▶ 全部」= 按文件夹原本顺序(含子文件夹)依次播放,走完从头再来
- 点某一首歌 = 只播这一首(会先停掉正在跑的随机,避免放完又被接管)
两种模式下,主界面上方的 X/XX 都有效(数的是本 App 排出来的队列)。
其它改动
- 设置里「显示子文件夹歌曲」开关已删除(子文件夹里的歌不再平铺列出)
- 关于页改为「作者 SadEggs,MIT 许可。」,去掉了"自用改版"的说法
已知小问题
- 之前 0.21 起"应用未安装/包无效"如果是下载截断导致的,请核对文件大小后再装
- 面板那个开关的 emoji(🔀 / ➡)在个别系统字体下可能显示成方框,只影响外观
署名
作者 SadEggs,MIT 许可。
v0.26 (测试版 / beta)
测试版 / Test build
- 切歌按随机列表走:下一首 = 列表下一首(走到末尾会重新洗牌),上一首 = 沿列表往回走(回到刚播过的那首),不再重新随机。
- 子文件夹显示歌曲数:文件夹那一行直接写「名字 · 46 首」,表示进去点一首会在整棵子树(含子文件夹)里随机。
- 不再在下方平铺子文件夹里的歌,只留当前文件夹自己的歌,找文件夹不再被埋掉。
- 主界面新增 X/XX:在专辑封面上方、左侧、离时钟一行距离,显示当前是队列第几首/共几首。
注意:这个 X/XX 数的是本 App 自己排的随机队列(所以整树随机运行时会显示,未随机时隐藏)。Poweramp 不公开它自己的播放队列,所以顺序队列的位置无法显示 —— 需要的话请告诉我,我们再想别的办法。
另外:设置里「显示子文件夹歌曲」那个开关现在不再起作用了(子文件夹里的歌已不再平铺列出)。
署名 / Credit
原作者 SadEggs,MIT 许可。
v0.25 (测试版 / beta)
测试版 / Test build
这次修的是你实测报的两个问题:
- 在子文件夹里切歌(悬浮条的上一首/下一首)现在会以「当前这首歌所在的文件夹」为根重新开始随机 —— 在子文件夹里切 = 随机这个子文件夹;在大文件夹本层的歌上切 = 随机整棵大树。
- 暂停时、或从子文件夹返回上级大文件夹后按「▶ 全部」 之前会造成播放器无响应:原因是引擎点歌时走了「先订阅文件夹队列 + 延迟点歌」那条路径,而面板切换过文件夹后这个请求会被丢弃。现在引擎点歌直接走文件、不再订阅队列;另外在暂停状态下开始随机,会在选曲落地后补一次「播放」。
其余不变:状态栏「随机 N/M」、点歌即整树随机、中英切换、时钟与电量。
署名 / Credit
原作者 SadEggs,MIT 许可。
v0.24 (测试版 / beta)
测试版 / Test build
- 状态栏时钟右边新增随机 N/M:显示当前是这轮整树随机的第几首(共几首),不随机时自动隐藏。
- 位置特意和左边的时钟拉开距离(左边距 14dp),避免和秒数看成一串数字。
- 计数由引擎自己上报,所以显示的就是正在播的那首。
署名 / Credit
原作者 SadEggs,MIT 许可。
v0.23 (测试版 / beta)
FloatingMusicBar 0.23 beta - the all button uses the app engine
v0.22 (测试版 / beta)
FloatingMusicBar 0.22 beta - the app shuffles the tree itself