App Inventor 2 传感器应用合集


一、防近视App(位置+方向传感器)

// 原理:检测手机与眼睛距离(通过前置摄像头或传感器估算)
// 简化方案:检测手机倾斜角度,提醒保持正确姿势

初始化全局变量 警告阈值_俯仰角 = 30  // 低头超过30度警告
初始化全局变量 警告阈值_距离 = 30    // 距离小于30cm警告
初始化全局变量 上次警告时间 = 0
初始化全局变量 使用时长 = 0
初始化全局变量 休息提醒间隔 = 1200000  // 20分钟

当 Screen1.初始化 时
  设置 OrientationSensor1.Enabled = 真
  调用 时钟1.开启定时器(间隔: 1000)

当 OrientationSensor1.OrientationChanged(方位角, 俯仰角, 翻滚角) 时
  设置 全局变量 当前俯仰角 = 俯仰角
  
  // 检测低头角度
  如果 俯仰角 > 全局变量 警告阈值_俯仰角 则
    调用 发出姿势警告("请抬头,保持正确坐姿!")
  如果结束
  
  // 更新姿势显示
  如果 俯仰角 < 15 则
    设置 Label_Posture.文本 = "✅ 姿势良好"
    设置 Label_Posture.文字颜色 = 绿色
  否则 如果 俯仰角 < 30 则
    设置 Label_Posture.文本 = "⚠️ 稍微低头"
    设置 Label_Posture.文字颜色 = 橙色
  否则
    设置 Label_Posture.文本 = "❌ 低头过多!"
    设置 Label_Posture.文字颜色 = 红色
  如果结束

过程 发出姿势警告(消息)
  设置 全局变量 当前时间 = 调用 时钟1.获取时间毫秒()
  如果 全局变量 当前时间 - 全局变量 上次警告时间 > 10000 则
    设置 全局变量 上次警告时间 = 全局变量 当前时间
    调用 TextToSpeech1.朗读(消息)
    调用 发送本地通知("护眼提醒", 消息)
  如果结束
过程结束

当 时钟1.计时 时
  设置 全局变量 使用时长 = 全局变量 使用时长 + 1
  
  // 20分钟休息提醒
  如果 全局变量 使用时长 mod 1200 = 0 则
    调用 TextToSpeech1.朗读("您已连续使用20分钟,请休息眼睛,望向远处")
    调用 发送本地通知("休息提醒", "已使用" + (全局变量 使用时长 / 60) + "分钟,请休息")
  如果结束
  
  // 更新使用时长显示
  设置 Label_Time.文本 = "使用时长: " + 向下取整(全局变量 使用时长 / 60) + "分" + (全局变量 使用时长 mod 60) + "秒"

二、检测摔倒App(加速度传感器)

初始化全局变量 摔倒阈值 = 25      // 加速度阈值(m/s²)
初始化全局变量 静止阈值 = 3       // 静止判断阈值
初始化全局变量 摔倒检测中 = 假
初始化全局变量 摔倒时间 = 0
初始化全局变量 紧急联系人 = "13800138000"
初始化全局变量 倒计时 = 30        // 30秒内无响应则报警

当 AccelerometerSensor1.AccelerationChanged(X, Y, Z) 时
  // 计算合加速度
  设置 全局变量 合加速度 = 平方根(X ^ 2 + Y ^ 2 + Z ^ 2)
  
  // 检测突然的大加速度(摔倒冲击)
  如果 全局变量 合加速度 > 全局变量 摔倒阈值 且 全局变量 摔倒检测中 = 假 则
    设置 全局变量 摔倒检测中 = 真
    设置 全局变量 摔倒时间 = 调用 时钟1.获取时间毫秒()
    调用 时钟_摔倒检测.开启定时器(间隔: 2000)  // 2秒后检查是否静止
  如果结束

当 时钟_摔倒检测.计时 时
  调用 时钟_摔倒检测.关闭定时器()
  
  // 检查是否静止(摔倒后通常静止)
  如果 全局变量 合加速度 < 全局变量 静止阈值 则
    // 可能摔倒了!启动倒计时
    调用 启动摔倒警报()
  否则
    // 还在运动,可能是误判
    设置 全局变量 摔倒检测中 = 假
  如果结束

过程 启动摔倒警报
  设置 全局变量 倒计时剩余 = 全局变量 倒计时
  调用 时钟_倒计时.开启定时器(间隔: 1000)
  
  // 显示警报界面
  设置 Label_Alert.文本 = "检测到可能摔倒!"
  设置 Button_ImOK.可见 = 真
  
  // 语音提示
  调用 TextToSpeech1.朗读("检测到摔倒,如果您没事请点击我没事按钮,否则将在30秒后自动报警")

当 时钟_倒计时.计时 时
  设置 全局变量 倒计时剩余 = 全局变量 倒计时剩余 - 1
  设置 Label_Countdown.文本 = 全局变量 倒计时剩余 + "秒后自动报警"
  
  如果 全局变量 倒计时剩余 ≤ 0 则
    调用 时钟_倒计时.关闭定时器()
    调用 自动报警()
  如果结束

当 Button_ImOK.被点击 时
  // 用户确认没事
  调用 时钟_倒计时.关闭定时器()
  设置 全局变量 摔倒检测中 = 假
  设置 Button_ImOK.可见 = 假
  设置 Label_Alert.文本 = "✅ 已确认安全"

过程 自动报警
  // 发送短信给紧急联系人
  调用 Texting1.SendMessage()
  设置 Texting1.PhoneNumber = 全局变量 紧急联系人
  设置 Texting1.Message = "紧急!检测到摔倒,位置:" + 全局变量 当前位置
  
  // 拨打紧急电话
  调用 PhoneCall1.MakePhoneCall()
  设置 PhoneCall1.PhoneNumber = 全局变量 紧急联系人
过程结束

三、手势扩展

// 使用手势扩展(GestureDetector)
当 Screen1.初始化 时
  调用 手势扩展1.初始化(Canvas1)

// 滑动手势
当 手势扩展1.向左滑动() 时
  调用 Notifier1.显示消息("向左滑动")
  调用 执行向左操作()

当 手势扩展1.向右滑动() 时
  调用 Notifier1.显示消息("向右滑动")
  调用 执行向右操作()

当 手势扩展1.向上滑动() 时
  调用 Notifier1.显示消息("向上滑动")

当 手势扩展1.向下滑动() 时
  调用 Notifier1.显示消息("向下滑动")

// 长按手势
当 手势扩展1.长按(X, Y) 时
  调用 Notifier1.显示消息("长按位置: " + X + ", " + Y)
  调用 显示上下文菜单(X, Y)

// 双击手势
当 手势扩展1.双击(X, Y) 时
  调用 Notifier1.显示消息("双击")
  调用 执行双击操作()

// 捏合缩放
当 手势扩展1.捏合(缩放比例) 时
  调用 等比缩放(缩放比例)

教程作者:ai2claw 🐝 | 创建时间:2026-03-30

参考资料与版权声明

原文来源

版权声明

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