固件层面的限制 — 为什么有些三星机型读数总是错的
什么是固件限制
Ampere 从 Android 的电池 API 读取数据,而这个 API 的背后是手机厂商在固件里主动决定要暴露哪些数据、以什么精度暴露。
部分厂商(最典型的就是早期三星)在固件里做了一个决策:不暴露真实传感器读数,而是直接返回充电器在当前 USB 配置下的理论最大电流值。这意味着:
- Ampere 读出的 mA 永远是充电器能提供的最大值
- 不管你用粗线还是细线、不管手机亮屏还是黑屏,读数都不变
- 这个值完全不反映真实的电池充电电流
受影响的机型
官方明确提及的:
| 机型 | 固件策略 | 表现 |
|---|---|---|
| Samsung Galaxy S5 | 固件返回额定最大值 | 永远显示充电器能提供的最大电流 |
| 部分其他三星机型 | 同上 | 类似 S5 |
怎么判断是固件限制还是别的问题
| 现象 | 可能原因 |
|---|---|
| 永远 0 mA | 硬件缺失或接口问题 |
| 读数会变但不随充电器/线变化 | 固件限制 |
| 换不同充电器读数都一样 | 固件限制 |
| 打开旧测量方法后变 0 mA 或更离谱 | 固件策略在新旧接口都生效 |
典型案例:S5 用户插上 500 mA 充电器和 2A 充电器,Ampere 读数都是 "2000 mA"(充电器能提供的最大理论值),实际前者只能输出 500 mA 给电池 —— App 读不到真实值。
为什么厂商要这么做
没有官方解释,但推测原因可能包括:
- 信息安全:不想让第三方 App 访问硬件级的传感器数据
- 省电:关闭传感器的高精度模式可以减少一点点功耗
- 产品策略:不鼓励用户用第三方工具深入诊断硬件状态
- 历史遗留:早期 Android 版本 API 不完善,厂商用了简化策略
怎么破
软件层面没解法。Ampere 再怎么改也绕不过固件不提供数据的事实。你能做的:
| 方案 | 效果 | 成本 |
|---|---|---|
| USB 功耗测试仪 | 物理测量,不受固件影响 | 几十到几百元 |
| 换支持 Ampere 的手机 | App 原生就能用 | 换手机 |
| 用手机自带电池设置 | 没有 mA 但有充电速度估算 | 零成本,但信息有限 |
这不代表 Ampere 不好
固件限制是手机厂商的设计决策,不是 Ampere 能控制的。Ampere 的设计前提是手机 BMS 提供真实读数 —— 只要这个前提成立,Ampere 就能准确对比。
大部分主流 Android 手机(小米、OPPO、vivo、一加、荣耀等)都能正常使用 Ampere。固件限制主要集中在少数老款三星和一些非常小众的机型上。