清泛IT社区

标题: App Inventor 2 里那十几个传感器,被问最多的9个问题一次说清 [打印本页]

作者: App Inventor 2     时间: 昨天 14:03
标题: App Inventor 2 里那十几个传感器,被问最多的9个问题一次说清
App Inventor 2 里那十几个传感器,被问最多的9个问题一次说清在 App Inventor 2 中文网的社区和文档留言区,"传感器"这个分类是提问频率最高的板块之一。原因不难理解:加速度计、陀螺仪、计步器、气压计、光线、NFC……十几个不可见组件摆在那里,名字都眼熟,可真到用的时候,很多人不知道选哪个、属性怎么配、数据为啥读不出来。我把最近半年被问得最多的问题挑出来,逐个拆开讲。如果你正在纠结某个传感器组件,直接跳到你关心的那一条。
Q1: 手机上没有对应的硬件,用了这个组件会不会报错?A: 绝大多数情况下不会崩溃,但数据会是空的或恒为0。App Inventor 2 的传感器组件在设计上都带有一个"可用状态"属性。以气压传感器 Barometer、湿度传感器 Hygrometer、温度传感器 Thermometer 为例,它们属于"物理环境组件",依赖设备真实的芯片。如果你的手机压根没有对应的硬件,组件的"可用"属性会返回 假,事件的触发不了,属性读出来也是默认值。正确做法:在你的初始化或开始使用时,先判断 可用状态,为假就弹个提示"此设备不支持气压计",而不是裸读数据。只有加速度传感器几乎人人都有,别的都建议加一层可用性判断。
Q2: 加速度传感器的 XYZ 分量到底怎么用?数字老和我预期不一样A: 加速度计测的是"比力",单位是 m/s2,读取前请先想清楚"分量是相对什么方向"。它的三个分量规则是:手机平放在桌面上时,X、Y 接近 0,Z 接近 -9.8(重力);左侧抬起 X 为正,右侧翘起 X 为负;底部抬起 Y 为正,顶部抬起 Y 为负;屏幕朝下 Z 约为 +9.8。很多人误以为加速度计能直接拿来测"速度变化量",其实它更适合做两件事:一是"晃动检测"(用"被晃动时"事件配合"敏感度"属性),二是"姿态感知"(判断手机是平放、侧放还是翻转)。如果要做精确的角度测量,应该用方向传感器 OrientationSensor,而不是加速度计。
Q3: 方向传感器、陀螺仪我该用哪个?A: 一句话:要"手机朝向"用方向传感器,要"转动快慢"用陀螺仪。方向传感器 OrientationSensor 会给你三个度数:方位角(朝北0/朝东90/朝南180/朝西270)、倾斜角(前后俯仰)、翻转角(左右侧倾),它适合做罗盘、平衡球这类"静态姿势判断"。陀螺仪 GyroscopeSensor 给的则是绕 X/Y/Z 轴的角速度(度/秒),描述的是"转得多快",适合做动作捕捉、甩动识别。二者都不需要额外权限,但都要先看"可用状态",部分安卓平板没有陀螺仪。
Q4: 计步器 Pedometer 一天能误差多少步?能用它做运动App吗?A: 计步器基于加速度传感器的晃动信号做统计,日常走路误差通常在百分之几到十几,适合做"粗略的步数打卡",不适合做专业计步。它提供了"行走步数"和"简单步数"两个值——简单步数记录所有检测到的原始步伐,"行走步数"则尝试过滤掉不像是向前运动的晃动。"步幅"默认 0.73 米,可校准后更准。想让步数在 App 关闭后还能累积,记得调用"保存"方法,重启后再读回来。要对运动数据较真、做心率或卡路里计算,请外接蓝牙手环,别指望手机计步器。
Q5: 位置传感器获取不到经纬度,一直是0,怎么回事?A: 排优先级排查三件事:1. 位置权限开没开;2. 组件"启用"属性和手机定位服务开没开;3. 是不是用的模拟器。首先,App 需要申请定位权限,否则经纬度永远是 0。其次,把位置传感器的"启用"设为真,同时确保手机系统里的定位是开的。最后,App Inventor 2 的模拟器并不支持真实 GPS,必须在真机上测。还要注意,位置信息是异步获取的——App 刚启动时坐标可能还没拿到,正确的姿势是在"位置改变时"事件里去读取,或者在启动后稍作等待。如果你的坐标要显示在地图上,建议把位置传感器和地图组件都设为"高德坐标(GCJ02)",两者保持一致,否则会出现标记漂移。
Q6: 光线传感器怎么读?数值一直是0A: 光线传感器读的是"照度",单位 lux,通常只在环境光突然变化时才有明显反应。它有两个属性:"照度"是最后一次测量值,"平均照度"是前10次的均值,后者更平滑、更适合做"自动调亮度"这类逻辑。数值一直是0,先看"可用状态"是否为真,很多廉价手机连光线传感器都没有;有传感器的话,用手电筒贴近屏幕或走窗户边都会让数值跳变。它适合做"黄昏自动切换暗色主题"这类趣味功能,不适合做精确的光强测量。
Q7: NFC 组件为什么扫不出我手环上的卡?A: 因为 NFC 组件目前只支持读纯文本标签,不支持银行卡、门禁的加密数据。这是 App Inventor 2 内置 NFC(NearField)组件的一个硬限制。它能做的只是:把手机贴近一个写入了文本的 NFC 标签,读到那串文本;或者反向地,把一段文字写进空白标签。而且该组件只能放在 Screen1 主屏幕上使用。所以想做门禁、支付、乘车这类场景,请去找相关的 NFC 拓展或改用原生方案。
Q8: 距离传感器(ProximitySensor)是干嘛的?App 里能用它做什么?A: 距离传感器测量物体离屏幕多少厘米,绝大多数手机上它就是"通话时靠近屏幕自动熄屏"用的那个传感器。不是所有手机都会暴露这个传感器给程序员,所以先用"可用状态"确认。它常见的玩法有两个:一个是做"智能熄屏"——检测到距离变近时关闭屏幕背光;另一个是做防误触——手机放口袋里时暂停界面操作。注意它返回的值很粗略,有些设备只有"近/远"两档,别拿它当精确测距仪。
Q9: 计时器 Clock 和上面这些传感器是一回事吗?A: 不是。Clock 不是一个传感器,而是一个不可见的时间管理组件,它依赖手机内部时钟,跟硬件传感器没关系。它常被误归到"传感器"分类里,可能是因为在组件面板里挨得近。Clock 的核心是"计时间隔(毫秒)"和"计时"事件——每隔固定时间触发一次。它还能做日期时间的各种运算:加天加周、求星期几、格式化日期、算两个时刻的持续时长等。如果你要做倒计时、定时轮询、整点提醒,用的是 Clock;如果你要感知物理世界,才用真正的传感器。
还想问什么?以上是社区里最高频的传感器问题。如果你遇到了上面没覆盖的坑——比如陀螺仪角度跳变、气压计海拔换算、计步器步幅校准——欢迎到 App Inventor 2 中文网 的社区发帖,带上你的积木截图和设备型号,效率会高很多。如果你刚接触传感器,建议从"加速度计晃动 + 计步器"这两个上手最快、几乎人人手机都有的组件玩起,先跑通一个"摇一摇换一句话"的小例子,再逐步拓展到位置和光线。




欢迎光临 清泛IT社区 (https://bbs.tsingfun.com/) Powered by Discuz! X3.3