App Inventor 2 传感器专题教程

覆盖:加速度传感器(检测摔倒)、方向传感器(指南针)、计步传感器、电池电量。

一、加速度传感器 - 检测摔倒

1.1 原理

摔倒时手机会产生剧烈的加速度变化,然后迅速归零(落地)。通过检测加速度突变来判断摔倒。

1.2 代码块

初始化全局变量 上次加速度 = 0
初始化全局变量 摔倒阈值 = 25    // m/s²,超过此值认为摔倒
初始化全局变量 静止阈值 = 3     // m/s²,低于此值认为静止
初始化全局变量 摔倒检测中 = 假

当 Screen1.初始化 时
  设置 加速度传感器1.启用 = 真
  设置 加速度传感器1.最小间隔 = 100  // 100ms检测一次

当 加速度传感器1.加速度改变 时(X加速度, Y加速度, Z加速度)
  // 计算合加速度
  初始化局部变量 合加速度 = 平方根(
    X加速度^2 + Y加速度^2 + Z加速度^2
  )
  
  // 检测摔倒:合加速度突然很大,然后很小
  如果 合加速度 > 全局变量 摔倒阈值 且 全局变量 摔倒检测中 = 假 则
    设置 全局变量 摔倒检测中 = 真
    // 启动延迟检测(500ms后检查是否静止)
    设置 计时器_摔倒.启用计时 = 真
  
  设置 全局变量 上次加速度 = 合加速度

// 500ms后检查是否真的摔倒
当 计时器_摔倒.计时 时
  设置 计时器_摔倒.启用计时 = 假
  如果 全局变量 上次加速度 < 全局变量 静止阈值 则
    // 确认摔倒!
    调用 触发摔倒警报()
  设置 全局变量 摔倒检测中 = 假

// 摔倒警报
定义 触发摔倒警报()
  调用 音效1.播放
  调用 对话框1.显示消息对话框("⚠️ 检测到摔倒!", "警报", "我没事")
  // 可选:自动发送位置给紧急联系人
  // 调用 发送紧急短信()

// 摇一摇检测(内置事件)
当 加速度传感器1.摇晃 时
  调用 对话框1.显示消息对话框("检测到摇晃!", "提示", "确定")

二、方向传感器 - 指南针

2.1 属性说明

属性说明范围
方位角(Azimuth)水平旋转角度(指南针方向)0~360°
俯仰角(Pitch)前后倾斜角度-90~90°
翻滚角(Roll)左右倾斜角度-90~90°

2.2 指南针代码块

当 Screen1.初始化 时
  设置 方向传感器1.启用 = 真

当 方向传感器1.方向改变 时(方位角, 俯仰角, 翻滚角)
  // 方位角转方向文字
  初始化局部变量 方向 = 调用 角度转方向(方位角)
  设置 标签_方向.文本 = 合并字符串(方向, " ", 四舍五入(方位角), "°")
  
  // 旋转指南针图片
  设置 图像精灵_指针.方向 = 360 - 方位角

// 角度转方向文字
定义 角度转方向(角度)
  如果 角度 < 22.5 或 角度 >= 337.5 则 返回 "北"
  否则如果 角度 < 67.5 则 返回 "东北"
  否则如果 角度 < 112.5 则 返回 "东"
  否则如果 角度 < 157.5 则 返回 "东南"
  否则如果 角度 < 202.5 则 返回 "南"
  否则如果 角度 < 247.5 则 返回 "西南"
  否则如果 角度 < 292.5 则 返回 "西"
  否则 返回 "西北"

2.3 防近视App(屏幕倾斜提醒)

初始化全局变量 安全俯仰角范围 = 30  // 俯仰角超过30°提醒

当 方向传感器1.方向改变 时(方位角, 俯仰角, 翻滚角)
  // 检测低头角度(俯仰角为负表示低头)
  如果 绝对值(俯仰角) > 全局变量 安全俯仰角范围 则
    设置 标签_提醒.文本 = "⚠️ 请保持正确坐姿!"
    设置 标签_提醒.背景颜色 = 红色
  否则
    设置 标签_提醒.文本 = "✅ 坐姿良好"
    设置 标签_提醒.背景颜色 = 绿色

三、计步传感器

3.1 属性说明

属性说明
步数(StepCount)累计步数
距离(Distance)累计距离(单位:米
卡路里(Calories)消耗卡路里
行走时间(ElapsedTime)行走时间(毫秒)
Q:distance是什么单位?米(m)

3.2 计步器代码块

当 Screen1.初始化 时
  设置 计步传感器1.启用 = 真
  设置 计步传感器1.停止检测 = 假

当 计步传感器1.步数改变 时(步数, 行走时间, 距离)
  设置 标签_步数.文本 = 合并字符串(步数, " 步")
  设置 标签_距离.文本 = 合并字符串(
    如果 距离 >= 1000 则
      合并字符串(四舍五入到小数点后1位(距离/1000), " km")
    否则
      合并字符串(四舍五入(距离), " m")
  )
  // 卡路里估算(步数 × 0.04 kcal)
  设置 标签_卡路里.文本 = 合并字符串(
    四舍五入到小数点后1位(步数 * 0.04), " kcal"
  )

// 重置步数
当 按钮_重置.被点击 时
  调用 计步传感器1.重置

四、电池电量监测

4.1 获取电池电量

App Inventor 2 没有内置电池组件,通过 Web客户端 调用系统广播获取,或使用扩展。 方法一:使用BatteryManager扩展(推荐)
当 Screen1.初始化 时
  // 使用BatteryUtils扩展
  调用 BatteryUtils1.获取电量

当 BatteryUtils1.电量获取完成 时(电量百分比, 是否充电)
  设置 标签_电量.文本 = 合并字符串(电量百分比, "%")
  如果 是否充电 则
    设置 标签_状态.文本 = "⚡ 充电中"
  否则
    如果 电量百分比 < 20 则
      设置 标签_状态.文本 = "🔴 电量不足"
    否则
      设置 标签_状态.文本 = "🔋 正常"
方法二:定时检测(用计时器每分钟查询)
当 计时器_电量.计时 时
  调用 BatteryUtils1.获取电量

五、综合案例:健康监测App

5.1 功能设计

┌─────────────────────────────────┐
│  今日健康数据                    │
├──────────┬──────────┬───────────┤
│ 步数     │ 距离     │ 卡路里    │
│ 8,234步  │ 6.2km   │ 329kcal  │
├──────────┴──────────┴───────────┤
│  方向:东北 45°  [指南针图]      │
├─────────────────────────────────┤
│  坐姿:✅ 良好  俯仰角:-15°    │
├─────────────────────────────────┤
│  电量:78%  🔋 正常             │
└─────────────────────────────────┘

5.2 摔倒检测 + 自动报警

定义 发送紧急短信()
  // 获取当前位置
  初始化局部变量 位置 = 合并字符串(
    "https://maps.google.com/maps?q=",
    位置传感器1.纬度, ",", 位置传感器1.经度
  )
  
  // 发送短信给紧急联系人
  设置 短信1.消息 = 合并字符串(
    "【紧急】检测到摔倒!当前位置:", 位置
  )
  设置 短信1.电话号码 = "13800138000"  // 紧急联系人
  调用 短信1.发送消息

六、常见问题

Q1:加速度传感器摔倒误报怎么办?

  • 调高 摔倒阈值(如从25调到35)
  • 增加延迟确认时间(从500ms调到1000ms)
  • 结合位置传感器速度变化综合判断

Q2:方向传感器不准确?

  • 远离金属物体和磁场干扰
  • 校准:手机画”8”字形运动几次
  • 使用 方向传感器1.精度 属性过滤低精度数据

Q3:计步传感器distance单位是什么?

米(m)。如需显示公里,除以1000即可。

Q4:计步传感器在后台还能计步吗?

需要设置 停止检测 = 假,并在App后台运行时保持传感器启用。部分手机会限制后台传感器,建议使用前台服务(需要扩展)。

参考资料


文档版本:2026.03 | 作者:App Inventor 2 中文网 www.fun123.cn

参考资料与版权声明

原文来源

版权声明

本文档基于 MIT App Inventor 官方文档及社区资源整理,版权归原作者所有:
  • MIT App Inventor 官方文档采用 CC BY-SA 4.0 授权
  • MIT App Inventor Community 帖子版权归原作者所有
本文档由 ai2claw 🐝 整理,仅供学习参考,如有侵权请联系删除。