- 概述
- TaifunBattery 扩展简介
- 导入扩展
- 扩展属性详解
- 示例一:电池信息显示 App
- 示例二:低电量提醒
- 示例三:根据充电状态调整 App 行为
- 示例四:电池信息仪表盘
- 省电优化技巧
- 完整项目下载
- 常见问题
- 注意事项
- 参考资料与版权声明
概述
在开发 App 时,获取设备电池信息是一项常见需求。例如,电量监控类 App、需要根据电量调整行为的省电型 App、或者在后台运行时提醒用户及时充电的工具类 App。
App Inventor 2 内置组件中没有电池传感器(Sensors 分类下不包含电池相关组件),因此需要借助第三方扩展(Extension) 来实现电池信息获取。
本文将介绍如何使用 TaifunBattery 扩展 来获取以下电池信息:
- 电池电量百分比
- 充电状态(充电中 / 已充满 / 放电中 / 未充电)
- 电源类型(USB / AC / 无线充电)
- 电池健康状态、温度、电压
- 电池容量、电流等高级信息
TaifunBattery 扩展简介
TaifunBattery 是由 Pura Vida Apps 开发的免费电池管理扩展,功能丰富且经过长期维护。
版本历史:
| 版本 | 发布时间 | 说明 |
|---|---|---|
| V1 | 2016-06-20 | 初始版本,支持电量、状态、电源类型等基础功能 |
| V1a | 2016-08-11 | 修复 DX execution 错误 |
| V2 | 2019-03-11 | 新增 CurrentNow、CurrentAvg、Capacity、ChargeCounter、EnergyCounter、Technology |
| V3 | 2021-08-24 | 新增下拉辅助积木块(注意:V3 与 V2 不兼容,仅用于新项目) |
系统要求:
- 基础功能:Android 4.0+
- 高级功能(CurrentNow、CurrentAvg、Capacity 等):Android 5.0+(API Level 21)
- 所需权限:无(不需要任何额外权限)
下载地址: https://puravidaapps.com/battery.php
导入扩展
- 从 Pura Vida Apps 官方页面 下载
.aix文件(建议下载 V3 版本) - 在 App Inventor 设计视图中,点击左侧面板底部的 “Extension” → “Import extension”
- 选择下载的
.aix文件,导入成功后即可在组件面板中看到 TaifunBattery3 组件 - 将 TaifunBattery3 组件拖入屏幕中(它是一个不可见组件)
扩展属性详解
基础属性
| 属性 | 返回值 | 说明 |
|---|---|---|
Level |
0 ~ 100 | 电池电量百分比 |
Status |
charging / full / discharging / not charging / unknown | 电池充电状态 |
Plugged |
usb / ac / wireless / unknown | 电源连接类型 |
Health |
cold / dead / good / overheat / over voltage / unknown / unspecified failure | 电池健康状态 |
Temperature |
数值 | 电池温度(摄氏度) |
Voltage |
数值 | 电池电压(毫伏) |
Technology |
文本 | 电池技术类型(如 Li-ion) |
高级属性(需 Android 5.0+)
| 属性 | 返回值 | 说明 |
|---|---|---|
CurrentNow |
整数 | 瞬时电流(微安),正值表示充电,负值表示放电 |
CurrentAverage |
整数 | 平均电流(微安) |
Capacity |
整数 | 电池容量(微安时) |
ChargeCounter |
整数 | 剩余容量占总容量的整数百分比 |
EnergyCounter |
长整数 | 剩余能量(纳瓦时) |
事件
| 事件 | 说明 |
|---|---|
BatteryChanged |
电池状态发生变化时触发 |
示例一:电池信息显示 App
界面设计
在 Design 视图中添加以下组件:
| 组件 | 名称 | 用途 |
|---|---|---|
Label |
LabelLevel |
显示电池电量 |
Label |
LabelStatus |
显示充电状态 |
Label |
LabelPlugged |
显示电源类型 |
Label |
LabelTemp |
显示电池温度 |
Label |
LabelVoltage |
显示电池电压 |
Button |
ButtonRefresh |
手动刷新按钮 |
TaifunBattery3 |
TaifunBattery3_1 |
电池扩展组件 |
积木代码
Screen1 初始化时获取电池信息
当 Screen1.初始化 时:
设置 LabelLevel.文字 为 "电池电量:" + TaifunBattery3_1.电量 + "%"
设置 LabelStatus.文字 为 "充电状态:" + TaifunBattery3_1.状态
设置 LabelPlugged.文字 为 "电源类型:" + TaifunBattery3_1.电源类型
设置 LabelTemp.文字 为 "电池温度:" + TaifunBattery3_1.温度 + "°C"
设置 LabelVoltage.文字 为 "电池电压:" + TaifunBattery3_1.电压 + "mV"
电池状态变化时自动更新
当 TaifunBattery3_1.电池状态变化 时:
设置 LabelLevel.文字 为 "电池电量:" + TaifunBattery3_1.电量 + "%"
设置 LabelStatus.文字 为 "充电状态:" + TaifunBattery3_1.状态
设置 LabelPlugged.文字 为 "电源类型:" + TaifunBattery3_1.电源类型
设置 LabelTemp.文字 为 "电池温度:" + TaifunBattery3_1.温度 + "°C"
设置 LabelVoltage.文字 为 "电池电压:" + TaifunBattery3_1.电压 + "mV"
手动刷新按钮
当 ButtonRefresh.点击 时:
设置 LabelLevel.文字 为 "电池电量:" + TaifunBattery3_1.电量 + "%"
设置 LabelStatus.文字 为 "充电状态:" + TaifunBattery3_1.状态
设置 LabelPlugged.文字 为 "电源类型:" + TaifunBattery3_1.电源类型
设置 LabelTemp.文字 为 "电池温度:" + TaifunBattery3_1.温度 + "°C"
设置 LabelVoltage.文字 为 "电池电压:" + TaifunBattery3_1.电压 + "mV"
示例二:低电量提醒
当电池电量低于 20% 时弹出提醒通知,同时检测充电状态——如果已经在充电则不提醒。
界面设计
| 组件 | 名称 | 用途 |
|---|---|---|
Notifier |
Notifier1 |
弹出提醒通知 |
TaifunBattery3 |
TaifunBattery3_1 |
电池扩展组件 |
Clock |
Clock1 |
定时检测(TimerInterval 设为 60000,即每 60 秒检测一次) |
积木代码
定义一个「检查电量并提醒」过程
定义 检查电量并提醒:
变量 currentLevel = TaifunBattery3_1.电量
变量 currentStatus = TaifunBattery3_1.状态
如果 currentLevel < 20 且 currentStatus ≠ "charging" 则:
调用 Notifier1.显示提醒("⚠️ 电量仅剩 " + currentLevel + "%,请及时充电!")
定时器触发检查
当 Clock1.定时器触发 时:
调用 检查电量并提醒
电池状态变化时也检查
当 TaifunBattery3_1.电池状态变化 时:
调用 检查电量并提醒
进阶:根据电量级别分级提醒
定义 检查电量并提醒:
变量 level = TaifunBattery3_1.电量
变量 status = TaifunBattery3_1.状态
如果 status = "charging" 则:
返回 // 已在充电,不需要提醒
如果 level ≤ 5 则:
调用 Notifier1.显示提醒("🔴 电量严重不足(" + level + "%),手机即将关机!")
否则如果 level ≤ 15 则:
调用 Notifier1.显示提醒("🟠 电量很低(" + level + "%),请尽快充电!")
否则如果 level ≤ 20 则:
调用 Notifier1.显示提醒("🟡 电量偏低(" + level + "%),建议充电。")
示例三:根据充电状态调整 App 行为
一个实用的场景:当 App 需要执行耗时操作(如大文件下载、GPS 持续追踪)时,先检测电池状态,在低电量时降低操作频率或暂停任务。
积木代码
定义 执行后台任务:
变量 level = TaifunBattery3_1.电量
变量 plugged = TaifunBattery3_1.电源类型
变量 status = TaifunBattery3_1.状态
如果 status = "charging" 或 plugged = "ac" 或 plugged = "usb" 则:
// 正在充电,可以全速执行
设置 Clock1.定时器间隔 为 5000 // 5 秒执行一次
调用 执行高频任务
否则如果 level > 50 则:
// 电量充足,中等频率
设置 Clock1.定时器间隔 为 30000 // 30 秒执行一次
调用 执行标准任务
否则如果 level > 20 则:
// 电量一般,降低频率
设置 Clock1.定时器间隔 为 120000 // 2 分钟执行一次
调用 执行省电任务
否则:
// 电量低,暂停后台任务
设置 Clock1.定时器启用 为 false
调用 Notifier1.显示提醒("电量过低,已暂停后台任务。")
示例四:电池信息仪表盘
将电池电量以更直观的方式展示,根据电量百分比显示不同颜色。
界面设计
| 组件 | 名称 | 用途 |
|---|---|---|
Canvas |
Canvas1 |
绘制电量指示器 |
Label |
LabelInfo |
显示详细电池信息 |
TaifunBattery3 |
TaifunBattery3_1 |
电池扩展组件 |
Clock |
Clock1 |
定时刷新(间隔 5000ms) |
积木代码
定义 更新电量显示:
变量 level = TaifunBattery3_1.电量
// 清空画布
调用 Canvas1.清空
// 根据电量设置颜色
变量 barColor = 绿色
如果 level < 20 则:
barColor = 红色
否则如果 level < 50 则:
barColor = 橙色
// 绘制背景矩形(灰色)
调用 Canvas1.绘制矩形(x1: 10, y1: 50, x2: 310, y2: 100, 颜色: 灰色, 填充: true)
// 绘制电量矩形(彩色),宽度按百分比缩放
变量 barWidth = level × 3 // 最大宽度 300px
调用 Canvas1.绘制矩形(x1: 10, y1: 50, x2: 10 + barWidth, y2: 100, 颜色: barColor, 填充: true)
// 绘制百分比文字
调用 Canvas1.绘制文字(x: 160, y: 82, 文字: level + "%")
// 更新详细信息
变量 info = "状态:" + TaifunBattery3_1.状态
info = info + "\n电源:" + TaifunBattery3_1.电源类型
info = info + "\n温度:" + TaifunBattery3_1.温度 + "°C"
info = info + "\n电压:" + TaifunBattery3_1.电压 + "mV"
info = info + "\n健康:" + TaifunBattery3_1.健康状态
设置 LabelInfo.文字 为 info
省电优化技巧
在使用 App Inventor 2 开发需要长时间运行的 App 时,以下省电技巧可以帮助减少电池消耗:
1. 合理设置定时器间隔
Clock 组件的定时器是最常见的电池消耗源。
// ❌ 不推荐:高频轮询
设置 Clock1.定时器间隔 为 100 // 100ms 一次,非常耗电
// ✅ 推荐:根据需求选择合理间隔
设置 Clock1.定时器间隔 为 30000 // 30 秒检测一次,已满足大多数场景
建议间隔:
- 实时性要求高(如计时器):500ms ~ 1000ms
- 常规检测(如电量监控):30000ms ~ 60000ms
- 低频任务(如数据同步):300000ms(5 分钟)
2. 按需启用传感器
不需要传感器时应及时关闭,不要让 GPS、加速度计等传感器持续运行。
当 Screen1.离开屏幕 时:
设置 LocationSensor1.启用 为 false
设置 AccelerometerSensor1.启用 为 false
设置 Clock1.定时器启用 为 false
3. 降低屏幕亮度需求
虽然 App Inventor 无法直接控制屏幕亮度,但可以通过设计手段减少亮屏时间:
- 使用深色背景(OLED 屏幕更省电)
- 减少不必要的动画和频繁界面刷新
- 在适当时候使用
Screen.关闭屏幕让屏幕休眠
4. 减少网络请求频率
每次网络请求都会唤醒无线电模块,消耗电量。
// 将多个小请求合并为一个批量请求
// 使用 Web 组件时,避免在定时器中频繁请求
当 Clock1.定时器触发 时:
// ❌ 每次定时器触发都请求
// 调用 Web1.执行请求
// ✅ 仅在数据确实需要更新时请求
如果 缓存过期 则:
调用 Web1.执行请求
5. 后台运行时降低活动
结合电池电量信息,在电量低时自动降低 App 活动:
| 电量范围 | 建议操作 |
|---|---|
| > 50% | 正常运行,所有功能可用 |
| 20% ~ 50% | 降低更新频率,减少网络请求 |
| < 20% | 暂停非必要后台任务,仅保留核心功能 |
| 正在充电 | 恢复正常运行,可执行耗时操作 |
6. 避免在循环中创建新组件
// ❌ 每次循环创建新的列表项,导致内存和CPU压力
当 Clock1.定时器触发 时:
设置 ListView1.列表元素 为 获取新数据() // 每次都刷新整个列表
// ✅ 仅在数据变化时更新
当 Clock1.定时器触发 时:
变量 newData = 获取新数据()
如果 newData ≠ 旧数据 则:
设置 ListView1.列表元素 为 newData
旧数据 = newData
完整项目下载
TaifunBattery 官方提供了示例 AIA 项目文件,可直接导入学习:
- TaifunBattery V3 示例项目: https://downloads.sourceforge.net/project/puravidaapps/battery3.aia
- TaifunBattery V3 扩展文件: https://downloads.sourceforge.net/project/puravidaapps/com.puravidaapps.TaifunBattery3.aix
常见问题
Q:导入扩展后看不到 TaifunBattery 组件?
请确认导入的是 .aix 文件而不是 .aia 文件。.aix 是扩展文件,.aia 是项目文件。另外,V3 版本的组件名称为 TaifunBattery3,与 V2 的 TaifunBattery 不同。
Q:CurrentNow / CurrentAverage 属性返回异常值?
部分设备的电池管理芯片不支持电流读取,此时会返回 Long.MIN_VALUE(即 -9223372036854775808)。这是设备硬件限制,非扩展问题。同时这些属性需要 Android 5.0+ 系统。
Q:BatteryChanged 事件多久触发一次?
BatteryChanged 事件由 Android 系统广播触发,不是固定间隔。系统会在电池状态发生变化时(如电量变化、插拔充电器、温度变化等)自动触发,通常电量每变化 1% 就会触发一次。
Q:iOS 上能使用这个扩展吗?
不能。 TaifunBattery 是基于 Android Battery Manager API 开发的扩展,仅适用于 Android 平台。App Inventor 的 iOS 版本目前不支持第三方扩展。如果需要 iOS 电池信息,需要通过 Web Viewer 加载 JavaScript Battery API 的方式间接获取(但功能有限)。
Q:需要申请额外权限吗?
不需要。TaifunBattery 扩展读取电池信息不需要 BATTERY_STATS 或其他任何权限,因为 Android 系统的电池状态广播是公开的,任何 App 都可以接收。
注意事项
- Android 版本兼容性:基础属性(Level、Status、Plugged、Health、Temperature、Voltage)在 Android 4.0+ 即可使用;高级属性(CurrentNow、CurrentAverage、Capacity 等)需要 Android 5.0+
- 模拟器限制:Android 模拟器可能不提供准确的电池信息,建议在真机上测试
- iOS 不支持:此扩展仅适用于 Android,iOS 版 App Inventor 不支持
- V2 与 V3 不兼容:V3 版本重新设计了属性名称和下拉辅助块,不要在旧项目中替换升级,仅在新项目中使用 V3
| *文档版本:2026.05 | 作者:App Inventor 2 中文网 www.fun123.cn* |
参考资料与版权声明
原文来源
- TaifunBattery Extension - Pura Vida Apps - Taifun
- MIT App Inventor 传感器组件文档 - MIT App Inventor
- MIT App Inventor Community - MIT App Inventor Community
- Android BatteryManager API - Android Developers
版权声明
本文档基于 MIT App Inventor 官方文档及社区资源整理,版权归原作者所有:
- MIT App Inventor 官方文档采用 CC BY-SA 4.0 授权
- TaifunBattery 扩展版权归 Pura Vida Apps 所有
- MIT App Inventor Community 帖子版权归原作者所有
本文档由 ai2claw 🐝 整理,仅供学习参考,如有侵权请联系删除。
扫码添加客服咨询