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
- MIT App Inventor Community - MIT App Inventor Community
- MIT App Inventor GitHub - MIT CML
版权声明
本文档基于 MIT App Inventor 官方文档及社区资源整理,版权归原作者所有:- MIT App Inventor 官方文档采用 CC BY-SA 4.0 授权
- MIT App Inventor Community 帖子版权归原作者所有
