- 概述
- TaifunBattery 扩展简介
- 导入扩展
- 扩展属性详解
- 示例一:电池信息显示 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 |
标签_电量 |
显示电池电量 |
Label |
标签_状态 |
显示充电状态 |
Label |
标签_充电状态 |
显示电源类型 |
Label |
标签_温度 |
显示电池温度 |
Label |
标签_电压 |
显示电池电压 |
Button |
按钮_刷新 |
手动刷新按钮 |
TaifunBattery3 |
TaifunBattery3_1 |
电池扩展组件 |
积木代码
Screen1 初始化时获取电池信息
when Screen1.Initialize() {
标签_电量.Text = "电池电量:" + TaifunBattery3_1.电量 + "%"
标签_状态.Text = "充电状态:" + TaifunBattery3_1.IsLooping
标签_充电状态.Text = "电源类型:" + TaifunBattery3_1.Type
标签_温度.Text = "电池温度:" + TaifunBattery3_1.Temperature + "°C"
标签_电压.Text = "电池电压:" + TaifunBattery3_1.GetBatteryVoltage + "mV"
}
电池状态变化时自动更新
while TaifunBattery3_1.电池状态变化 {
标签_电量.Text = "电池电量:" + TaifunBattery3_1.电量 + "%"
标签_状态.Text = "充电状态:" + TaifunBattery3_1.IsLooping
标签_充电状态.Text = "电源类型:" + TaifunBattery3_1.Type
标签_温度.Text = "电池温度:" + TaifunBattery3_1.Temperature + "°C"
标签_电压.Text = "电池电压:" + TaifunBattery3_1.GetBatteryVoltage + "mV"
}
手动刷新按钮
when 按钮_刷新.Click() {
标签_电量.Text = "电池电量:" + TaifunBattery3_1.电量 + "%"
标签_状态.Text = "充电状态:" + TaifunBattery3_1.IsLooping
标签_充电状态.Text = "电源类型:" + TaifunBattery3_1.Type
标签_温度.Text = "电池温度:" + TaifunBattery3_1.Temperature + "°C"
标签_电压.Text = "电池电压:" + TaifunBattery3_1.GetBatteryVoltage + "mV"
}
示例二:低电量提醒
当电池电量低于 20% 时弹出提醒通知,同时检测充电状态——如果已经在充电则不提醒。
界面设计
| 组件 | 名称 | 用途 |
|---|---|---|
Notifier |
对话框1 |
弹出提醒通知 |
TaifunBattery3 |
TaifunBattery3_1 |
电池扩展组件 |
Clock |
计时器1 |
定时检测(TimerInterval 设为 60000,即每 60 秒检测一次) |
积木代码
定义一个「检查电量并提醒」过程
procedure 检查电量并提醒() {
global currentLevel = TaifunBattery3_1.电量
global currentStatus = TaifunBattery3_1.状态
if currentLevel < 20 and currentStatus != "charging" {
对话框1.ShowAlert(join("⚠️ 电量仅剩 ", currentLevel, "%,请及时充电!"))
}
}
定时器触发检查
when 计时器1.Timer() {
检查电量并提醒()
}
电池状态变化时也检查
when TaifunBattery3_1.BatteryChanged() {
检查电量并提醒()
}
进阶:根据电量级别分级提醒
procedure 检查电量并提醒2() {
global level = TaifunBattery3_1.电量
global status = TaifunBattery3_1.状态
if status == "charging" {
// 已在充电,不需要提醒
} else {
if level <= 5 {
对话框1.ShowAlert(join("🔴 电量严重不足(", level, "%),手机即将关机!"))
} else if level <= 15 {
对话框1.ShowAlert(join("⚠️ 电量较低(", level, "%),请尽快充电!"))
} else if level <= 30 {
对话框1.ShowAlert(join("💡 建议开始充电(", level, "%)。"))
}
}
}
结合电源状态控制应用行为
在执行耗电任务(如GPS定位、大量网络请求、复杂计算)前,检查是否连接电源或电量是否充足。如果条件不允许,降低更新频率或暂停任务。
procedure 执行后台任务() {
global level = TaifunBattery3_1.电量
global plugged = TaifunBattery3_1.电源类型
global status = TaifunBattery3_1.状态
if status == "charging" or plugged == "ac" or plugged == "usb" {
// 正在充电,可以全速执行
计时器1.TimerInterval = 5000 // 5 秒执行一次
执行高频任务()
} else if level > 50 {
// 电量充足,中等频率
计时器1.TimerInterval = 30000 // 30 秒执行一次
执行标准任务()
} else if level > 20 {
// 电量一般,降低频率
计时器1.TimerInterval = 120000 // 2 分钟执行一次
执行省电任务()
} else {
// 电量低,暂停后台任务
计时器1.TimerEnabled = false
对话框1.ShowAlert("电量过低,已暂停后台任务。")
}
}
示例四:电池信息仪表盘
将电池电量以更直观的方式展示,根据电量百分比显示不同颜色。
界面设计
| 组件 | 名称 | 用途 |
|---|---|---|
Canvas |
画布1 |
绘制电量指示器 |
Label |
LabelInfo |
显示详细电池信息 |
TaifunBattery3 |
TaifunBattery3_1 |
电池扩展组件 |
Clock |
计时器1 |
定时刷新(间隔 5000ms) |
积木代码
procedure 更新电量显示() {
global level = TaifunBattery3_1.电量
// 清空画布
画布1.Clear()
// 根据电量设置颜色
global barColor = "green"
if level < 20 {
barColor = "red"
} else if level < 50 {
barColor = "orange"
}
// 绘制背景矩形(灰色)
画布1.PaintColor = "gray"
画布1.DrawRect(10, 50, 310, 100, true)
// 绘制电量矩形(彩色),宽度按百分比缩放
global barWidth = level * 3 // 最大宽度 300px
画布1.PaintColor = barColor
画布1.DrawRect(10, 50, 10 + barWidth, 100, true)
// 绘制百分比文字
画布1.DrawText(level + "%", 160, 82)
// 更新详细信息
global 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.Text = info
}
省电优化技巧
在使用 App Inventor 2 开发需要长时间运行的 App 时,以下省电技巧可以帮助减少电池消耗:
1. 合理设置定时器间隔
Clock 组件的定时器是最常见的电池消耗源。
// ❌ 不推荐:高频轮询
计时器1.TimerInterval = 100 // 100ms 一次,非常耗电
// ✅ 推荐:根据需求选择合理间隔
计时器1.TimerInterval = 30000 // 30 秒检测一次,已满足大多数场景
建议间隔:
- 实时性要求高(如计时器):500ms ~ 1000ms
- 常规检测(如电量监控):30000ms ~ 60000ms
- 低频任务(如数据同步):300000ms(5 分钟)
2. 按需启用传感器
不需要传感器时应及时关闭,不要让 GPS、加速度计等传感器持续运行。
when Screen1.LostFocus() {
位置传感器1.Enabled = false
加速度传感器1.Enabled = false
计时器1.TimerEnabled = false
}
3. 降低屏幕亮度需求
虽然 App Inventor 无法直接控制屏幕亮度,但可以通过设计手段减少亮屏时间:
- 使用深色背景(OLED 屏幕更省电)
- 减少不必要的动画和频繁界面刷新
- 在适当时候使用
Screen.关闭屏幕让屏幕休眠
4. 减少网络请求频率
每次网络请求都会唤醒无线电模块,消耗电量。
// 将多个小请求合并为一个批量请求
// 使用 Web 组件时,避免在定时器中频繁请求
when 计时器1.Timer() {
// ❌ 每次定时器触发都请求
// Web客户端1.Get("url")
// ✅ 仅在数据确实需要更新时请求
if 缓存过期 {
Web客户端1.Get("url")
}
}
5. 后台运行时降低活动
结合电池电量信息,在电量低时自动降低 App 活动:
| 电量范围 | 建议操作 |
|---|---|
| > 50% | 正常运行,所有功能可用 |
| 20% ~ 50% | 降低更新频率,减少网络请求 |
| < 20% | 暂停非必要后台任务,仅保留核心功能 |
| 正在充电 | 恢复正常运行,可执行耗时操作 |
6. 避免在循环中创建新组件
// ✅ 仅在数据变化时更新
when 计时器1.Timer() {
global newData = 获取新数据()
if newData != 旧数据 {
ListView1.Elements = newData
global 旧数据 = 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 🐝 整理,仅供学习参考,如有侵权请联系删除。
扫码添加客服咨询