Skip to content

Releases: SadEggs/musicwindow

v1.0.1 正式版

Choose a tag to compare

@github-actions github-actions released this 29 Sep 16:07

音乐悬浮条 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 文件,不需要「所有文件访问」。

已知限制

  1. App 自己排歌时每首之间约 0.3~1 秒空隙(播放器无法被要求无缝接歌)
  2. 悬浮条的矩形范围会吃掉触摸(Android 悬浮窗固有限制),可折叠/停靠/调低不透明度
  3. App 完全不碰播放器自己的随机开关(Poweramp 的随机是循环切换、无法读取)
  4. 部分游戏会主动隐藏所有悬浮窗(setHideOverlayWindows / 反外挂),无解

作者与授权

  • 原作者 / 需求:SadEggs — https://github.com/SadEggs
  • 代码编写:DeepSeek V4 Flash(人提需求 → AI 写代码 → GitHub Actions 云端编译)
  • 授权:MIT —— 可自由编译、修改、发布,请署名原作者并保留 LICENSE

v1.0 正式版

Choose a tag to compare

@github-actions github-actions released this 29 Sep 16:04

音乐悬浮条 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 文件,不需要「所有文件访问」。

已知限制

  1. App 自己排歌时每首之间约 0.3~1 秒空隙(播放器无法被要求无缝接歌)
  2. 悬浮条的矩形范围会吃掉触摸(Android 悬浮窗固有限制),可折叠/停靠/调低不透明度
  3. App 完全不碰播放器自己的随机开关(Poweramp 的随机是循环切换、无法读取,帮它按只会改掉你的档位)
  4. 部分游戏会主动隐藏所有悬浮窗(setHideOverlayWindows / 反外挂),无解

作者与授权

  • 原作者 / 需求:SadEggs — https://github.com/SadEggs
  • 代码编写:DeepSeek V4 Flash(人提需求 → AI 写代码 → GitHub Actions 云端编译)
  • 授权:MIT —— 可自由编译、修改、发布,请署名原作者并保留 LICENSE

v0.29 (测试版 / beta)

Pre-release

Choose a tag to compare

@github-actions github-actions released this 29 Sep 15:52

测试版 / Test build

新增两个开关(面板头部,点一下切换,会记住)

🔂 单曲循环 / 不循环

  • 开到「单曲循环」后,点某一首歌就一直重复这一首,直到你切换成别的模式(点「▶ 全部」,或改别的开关)
  • 为了不把每遍结尾切掉,这个模式下的切歌点推到了曲末前 0.3 秒(普通切歌是 1.5 秒)

点歌带队列 / 点歌只放这首

  • 点歌带队列(默认,和以前一样):点某一首歌,这首歌就是整个队列的第一首,效果同「▶ 全部」
    • 随机模式:后面接随机顺序(含不含子文件夹看第二个开关)
    • 顺序模式:后面接文件夹原本顺序 —— 从这首歌往后排,排到末尾再回到前面那些(不是跳回第一首重来)
  • 点歌只放这首:只播这一首,不再生成队列

三个开关组合起来的效果

单曲循环 点歌带队列 点某一首歌的结果
开 任意 只重复这一首(其它开关此时不生效)
关 开 这首歌 + 整个队列(随机或顺序,看模式与子文件夹开关)
关 关 只播这一首

「▶ 全部」不受「点歌带队列」影响,始终按模式和子文件夹开关播放整个范围。

下载

app-release.apk(附件里的大约 105.6 KB)。若提示「包无效」,请核对大小、用系统浏览器重下、或先卸载旧版。

署名

作者 SadEggs,MIT 许可。

v0.28 (测试版 / beta)

Pre-release

Choose a tag to compare

@github-actions github-actions released this 29 Sep 15:38

测试版 / Test build

修掉「点歌不随机、只有『▶ 全部』好使」的根因

你的症状(「▶ 全部」有效、点歌无效)暴露了一个残留设置:

早期版本里那个设置项「点一首歌也按整个文件夹树播放」默认是关闭的,你当时打开过设置页,它就把 tree_play=false 存进了设备。此后升级虽然把默认值改成开启,但存下来的 false 一直在,而点歌的随机入口正好检查这个值 → 于是引擎永远不启动,屏幕上没有任何提示。

而「▶ 全部」从来没检查过这个值,所以它一直好用 —— 完全对得上你的观察。

这个隐藏开关已经删掉了:现在点歌的含义只由面板上那两个看得见的按钮决定。

面板新增第二个开关:含子文件夹 / 仅本层

开关 作用
含子文件夹(默认) 随机/播放的范围 = 当前文件夹及其下面所有子文件夹
仅本层 只在当前文件夹自己的歌曲里随机/顺序播放

它有自己的存储键,任何旧版本存下的值都不会影响它,默认开启(= 你之前「▶ 全部」的行为)。

现在的完整行为

随机模式(🔀)

  • 「▶ 全部」= 当前文件夹(含/不含子文件夹,看第二个开关)随机播放
  • 点某一首歌 = 这首歌成为随机队列的第一首
    • 在大文件夹点 → 大文件夹范围(第二个开关决定是否含子文件夹)
    • 在子文件夹点 → 该子文件夹范围的歌
  • 即使已有随机在跑,点歌也会重新开始随机

顺序模式(➡)

  • 「▶ 全部」= 按文件夹原本顺序依次播放(走完从头再来)
  • 点某一首歌 = 只播这一首(会停掉正在跑的随机)

下载

app-release.apk,大小 105,824 字节(约 103.3 KB)。若提示"包无效",请核对大小、用系统浏览器重下、或先卸载旧版。

署名

作者 SadEggs,MIT 许可。

v0.27 (测试版 / beta)

Pre-release

Choose a tag to compare

@github-actions github-actions released this 29 Sep 13:32

测试版 / Test build

面板新增「🔀 随机 / ➡ 顺序」开关(点一下切换,会记住)

随机模式

  • 「▶ 全部」= 在当前文件夹的整棵树(含子文件夹)里随机播放
  • 点某一首歌 = 这首歌成为随机队列的第一首
    • 在大文件夹点 → 队列 = 大文件夹下所有歌(含子文件夹)
    • 在子文件夹点 → 队列 = 该子文件夹下所有歌
  • 这一条现在在整树随机已经在跑的时候也生效(之前的问题:引擎在跑时点歌只播那一首,不重开随机,所以你会觉得"随机出问题了")

顺序模式

  • 「▶ 全部」= 按文件夹原本顺序(含子文件夹)依次播放,走完从头再来
  • 点某一首歌 = 只播这一首(会先停掉正在跑的随机,避免放完又被接管)

两种模式下,主界面上方的 X/XX 都有效(数的是本 App 排出来的队列)。

其它改动

  • 设置里「显示子文件夹歌曲」开关已删除(子文件夹里的歌不再平铺列出)
  • 关于页改为「作者 SadEggs,MIT 许可。」,去掉了"自用改版"的说法

已知小问题

  • 之前 0.21 起"应用未安装/包无效"如果是下载截断导致的,请核对文件大小后再装
  • 面板那个开关的 emoji(🔀 / ➡)在个别系统字体下可能显示成方框,只影响外观

署名

作者 SadEggs,MIT 许可。

v0.26 (测试版 / beta)

Pre-release

Choose a tag to compare

@github-actions github-actions released this 29 Sep 13:14

测试版 / Test build

  1. 切歌按随机列表走:下一首 = 列表下一首(走到末尾会重新洗牌),上一首 = 沿列表往回走(回到刚播过的那首),不再重新随机。
  2. 子文件夹显示歌曲数:文件夹那一行直接写「名字 · 46 首」,表示进去点一首会在整棵子树(含子文件夹)里随机。
  3. 不再在下方平铺子文件夹里的歌,只留当前文件夹自己的歌,找文件夹不再被埋掉。
  4. 主界面新增 X/XX:在专辑封面上方、左侧、离时钟一行距离,显示当前是队列第几首/共几首。

注意:这个 X/XX 数的是本 App 自己排的随机队列(所以整树随机运行时会显示,未随机时隐藏)。Poweramp 不公开它自己的播放队列,所以顺序队列的位置无法显示 —— 需要的话请告诉我,我们再想别的办法。

另外:设置里「显示子文件夹歌曲」那个开关现在不再起作用了(子文件夹里的歌已不再平铺列出)。

署名 / Credit

原作者 SadEggs,MIT 许可。

v0.25 (测试版 / beta)

Pre-release

Choose a tag to compare

@github-actions github-actions released this 29 Sep 13:06

测试版 / Test build

这次修的是你实测报的两个问题:

  1. 在子文件夹里切歌(悬浮条的上一首/下一首)现在会以「当前这首歌所在的文件夹」为根重新开始随机 —— 在子文件夹里切 = 随机这个子文件夹;在大文件夹本层的歌上切 = 随机整棵大树。
  2. 暂停时、或从子文件夹返回上级大文件夹后按「▶ 全部」 之前会造成播放器无响应:原因是引擎点歌时走了「先订阅文件夹队列 + 延迟点歌」那条路径,而面板切换过文件夹后这个请求会被丢弃。现在引擎点歌直接走文件、不再订阅队列;另外在暂停状态下开始随机,会在选曲落地后补一次「播放」。

其余不变:状态栏「随机 N/M」、点歌即整树随机、中英切换、时钟与电量。

署名 / Credit

原作者 SadEggs,MIT 许可。

v0.24 (测试版 / beta)

Pre-release

Choose a tag to compare

@github-actions github-actions released this 29 Sep 13:02

测试版 / Test build

  • 状态栏时钟右边新增随机 N/M:显示当前是这轮整树随机的第几首(共几首),不随机时自动隐藏。
  • 位置特意和左边的时钟拉开距离(左边距 14dp),避免和秒数看成一串数字。
  • 计数由引擎自己上报,所以显示的就是正在播的那首。

署名 / Credit

原作者 SadEggs,MIT 许可。

v0.23 (测试版 / beta)

Pre-release

Choose a tag to compare

@github-actions github-actions released this 29 Sep 10:21
FloatingMusicBar 0.23 beta - the all button uses the app engine

v0.22 (测试版 / beta)

Pre-release

Choose a tag to compare

@github-actions github-actions released this 29 Sep 10:01
FloatingMusicBar 0.22 beta - the app shuffles the tree itself