Skip to content

Releases: godweiyang/ToolBox

v1.8.8 修复多工具发版阻塞问题

Choose a tag to compare

@godweiyang godweiyang released this 05 Jul 07:56

ToolBox v1.8.8

修复

  • 修复 Android 14 上局域网文件互传前台服务启动时缺少服务类型导致崩溃的问题。
  • 修复 Android 10+ 文件互传列表可见但下载 404 的问题,改为通过 MediaStore content Uri 读取文件。
  • 修复 Android 13+ 视频下载被不必要的媒体读取权限拦截的问题。
  • 修复金属探测器弱震动报警参数长度不匹配导致的崩溃。
  • 修复视频下载页面退出后后台进度回调仍更新 UI 的生命周期风险。
  • 修复视频转 GIF 输出 Uri 查询不可靠、失败时残留 pending 媒体项的问题。
  • 修复 Android 8/9 上二维码、九宫格、GIF、视频转 GIF、文件互传保存前缺少写存储权限的问题。
  • 修复 WiFi 热力图申请步频权限后重复启动采样导致传感器重复注册的问题。

清理

  • 清理构建 warning 和局部代码卫生问题,保持 debug/release 构建日志干净。

v1.8.7 自适应步长+朝向低通滤波

Choose a tag to compare

@godweiyang godweiyang released this 05 Jul 07:27

v1.8.7 自适应步长 + 朝向低通滤波

改进1:自适应步长(Weinberg 算法)

  • 不再固定 0.65 米/步
  • 每步根据加速度幅值的峰值/谷值动态估算:stepLength = K * sqrt(accelMax - accelMin)
  • 步子大(跑步)→ 步长自动增大;步子小(慢走)→ 步长自动减小
  • 限制步长在 0.3 ~ 1.2 米合理范围
  • 即使有系统 TYPE_STEP_DETECTOR,也同时注册加速度计用于步长估算

改进2:朝向低通滤波

  • 用复数平均法平滑朝向读数(滑动窗口 10 个采样)
  • 避免角度绕圈问题(359°↔1° 跳变)
  • 减少瞬时抖动,缓解"走 10 步南 + 10 步北不回到原点"的漂移

诚实的局限说明

PDR(行人航迹推算)是手机室内定位的固有问题,本方案仍做不到精确还原户型:

  1. 朝向漂移:室内金属家具、电器会干扰磁力计,慢速移动时陀螺仪也会漂移
  2. 步数漏检/多检:系统步频检测偶尔会漏步或多步
  3. 步长估算误差:Weinberg 算法是经验公式,不同人/不同步伐会有偏差
  4. 无闭环修正:手机端没有"知道回到起点"的能力,误差会持续累积

如果想要精确的户型图,需要其他方案(WiFi 指纹 SLAM、蓝牙信标等),手机端纯 PDR 只能给出相对轨迹的近似。

v1.8.6 用步频检测PDR替代加速度积分

Choose a tag to compare

@godweiyang godweiyang released this 05 Jul 07:18

v1.8.6 用步频检测 PDR 替代加速度积分

根本问题

之前的加速度二次积分方案在室内定位不可行:

  • 传感器噪声被积分放大,导致静止时漂移
  • 重力分离不完美
  • 手机竖着拿时水平加速度主要在 z 轴,被忽略
  • 即使走动 1.5 秒,积分位移也只有几厘米,根本看不出移动

修复:改用步频检测 PDR

  • TYPE_STEP_DETECTOR 系统级步频检测(Android 4.4+,准确可靠)
  • 每检测到一步,沿当前朝向推进固定步长 0.65 米
  • TYPE_ROTATION_VECTOR 提供朝向
  • 静止时(无步数)采样点位置不变,只更新信号值
  • Android 10+ 需要 ACTIVITY_RECOGNITION 运行时权限,首次使用会弹窗请求
  • 无 STEP_DETECTOR 传感器或未授权时,回退到加速度计手动步频检测(状态机:幅值超阈值 → 等峰值 → 回落判定为一步)

注意

  • 首次启动会请求"身体活动识别"权限,授权后下次启动才能用系统步频检测
  • 本次启动如未授权,会用加速度计回退方案(准确度稍低但仍可用)
  • 采样点下方会显示"共 X 步",可确认步频检测是否生效

v1.8.5 修复热力图位移不灵敏+同点颜色叠加

Choose a tag to compare

@godweiyang godweiyang released this 05 Jul 07:12

v1.8.5 修复热力图位移不灵敏 + 同点颜色叠加

问题1:移动了但点不跟着移动

根因: 上一版用 s += a * dt² * 0.5 直接积分位移,这个值极小(加速度 2 m/s²,dt=0.02s,s=0.0004m),走 1.5 秒也才几厘米,根本看不出移动。

修复: 改为速度积分法

  • 速度积分:v += a * dt
  • 位移积分:s += v * dt + 0.5 * a * dt²
  • 走动时持续累积速度,位移才合理

问题2:ZUPT 零速更新防止漂移

  • 检测到静止时(加速度幅值 < 1.5 m/s²)连续 3 次后强制清零速度
  • 避免传感器噪声导致静止时速度累积漂移
  • 走动阈值从 1.0 提高到 1.5 m/s,避免轻微晃动误判为走动

问题3:同一点颜色越叠越深

根因: 站着不动时每 1.5 秒采一个点,多个色块叠加 alpha 越来越高。

修复: 移动距离 < 0.3m 时,更新最后一个采样点的 RSSI 而不是追加新点

  • HeatMapView.updateLastSample(rssi) 替换最后一个点的信号值
  • 同位置的色块只反映最新信号,不会越叠越深

v1.8.4 热力图位移检测优化+禁用Tab滑动

Choose a tag to compare

@godweiyang godweiyang released this 05 Jul 07:07

v1.8.4 改进

1. 采样点位置基于真实位移(修复静止时点飘移)

  • 新增加速度计 + 旋转矢量传感器
  • 低通滤波分离重力,检测水平方向线性加速度
  • 只在检测到走动(加速度幅值 > 1.0 m/s²)时积分位移
  • 手机静止时采样点位置保持不变,只更新信号值
  • 走动时按朝向把位移从手机坐标系旋转到世界坐标系
  • 单周期累计位移上限 1.5 米,避免抖动导致大跳

2. 去掉点上的文字标签

  • 不再画中心小圆点、白色描边、"极佳/良好/一般/较弱/很差 -28" 等文字
  • 只保留径向渐变色块,颜色本身已能反映信号强度(红=弱,绿=强)

3. 禁用 ViewPager2 滑动手势

  • 任何手势(单指/双指)都不再切换 Tab
  • 只能通过点击顶部 Tab 标签切换"实时信号 / 信号热力图"
  • 热力图页的拖动和缩放手势完全受 HeatMapView 控制,不再被父级拦截

v1.8.3 修复热力图拖动切 Tab 问题

Choose a tag to compare

@godweiyang godweiyang released this 05 Jul 06:58

修复:WiFi 热力图拖动时整个屏幕被跟着拖

问题

  • 在热力图页拖动地图时,左右滑动会被 ViewPager2 拦截,导致切到「实时信号」Tab
  • 双指缩放时也可能触发同样问题

修复

  • 在 HeatMapView.onTouchEvent 中,当检测到双指缩放或已放大后的单指拖动时,调用 parent.requestDisallowInterceptTouchEvent(true) 阻止父级(ViewPager2)拦截触摸事件
  • 手指抬起后恢复 requestDisallowInterceptTouchEvent(false),此时左右滑动可正常切 Tab
  • 未放大时(userScale ≈ 1)单指滑动仍允许 ViewPager2 切 Tab,避免影响正常翻页

v1.8.2 WiFi 热力图双指缩放

Choose a tag to compare

@godweiyang godweiyang released this 05 Jul 06:54

改进:WiFi 热力图删除手动模式 + 双指缩放

改动

  • 删除手动模式:不再需要点击地图标记,直接自动采样
  • 双指捏合缩放:地图支持 0.3x ~ 8x 缩放,放大后可看清聚集的点
  • 单指拖动平移:放大后可拖动查看不同区域
  • 重置视图按钮:底部新增「重置视图」按钮,一键恢复到自动 fit 状态
  • 采样点位置改为世界坐标累加:每次采样点位置 = 上次位置 + 随机方向 0.3~0.6 米,点自然散开
  • 缩放足够大时才显示标签:避免缩小时文字挤一起
  • 网格随缩放自适应:每 1 米一条网格线,缩太小自动隐藏

v1.8.1 WiFi 热力图手动/自动模式切换

Choose a tag to compare

@godweiyang godweiyang released this 05 Jul 06:47

改进:WiFi 热力图新增手动/自动模式切换

问题

  • v1.8.0 默认是自动模式,所有点都聚集在地图中心,看不清
  • 没有明确的手动模式入口

改进

  • 新增模式切换按钮:底部新增「手动模式 / 自动模式」切换按钮
  • 手动模式(默认)
    • 走到一个位置后点击地图任意位置,在该点标记当前 RSSI
    • 点散布在用户点击的各个位置,自然占满屏幕
    • 底部提示「点击地图任意位置标记当前位置的信号」
  • 自动模式
    • 每 1.5 秒自动采集一个点,位置在上次采样点附近随机抖动
    • 切换到自动模式后自动开始采样,再点「停止」可暂停
    • 底部提示「自动采样中,每 1.5 秒采集一个点」
  • 云块半径从 180px 调小到 120px,单个采样点更清晰
  • 「开始/停止」按钮仅在自动模式显示,手动模式不需要

v1.8.0 WiFi 热力图改为点状云模式

Choose a tag to compare

@godweiyang godweiyang released this 05 Jul 06:36

重做:WiFi 信号热力图改为点状云模式

问题

  • 原 PDR 步行推算不灵敏,原地晃手机会误判步数画出错误轨迹
  • 信息复杂(步数/距离),用户看不懂

改进

  • 抛弃 PDR 算法,删除 PdrTracker.kt
  • 改为点状云热力图:每个采样点画径向渐变色块,多个色块自然叠加形成云状热力图
  • 两种采样模式
    • 手动:走到一个位置后点击地图,在点击位置标记当前 RSSI
    • 自动:点「开始探测」每 1.5 秒在地图中心自动采一个点(带随机抖动避免重叠)
  • 简化信息:只显示信号等级文字(极佳/良好/一般/较弱/很差)+ RSSI 数值,不再显示步数/距离
  • 色块半径 180px,半透明叠加,类似天气预报热力图
  • 红→黄→绿三色渐变表示信号弱→强

v1.7.4 修复 WiFi 频段格式化崩溃

Choose a tag to compare

@godweiyang godweiyang released this 05 Jul 06:17

修复

  • 修复 WiFi 信号探测器点击"开始探测"时弹出"启动失败: IllegalFormatConversionException: f"的问题
  • 根因:strings.xml 中 wifi_freq 资源 %1$s %.1f GHz 混用了显式编号(%1$s)和隐式编号(%.1f),Android Formatter 在混合使用时会错位,把 String 参数误传给 %f 占位符
  • 修复:统一使用显式编号 %1$s %2$.1f GHz