- 传感器组件
传感器组件
目录:
加速度传感器
条码扫描器 指导
气压传感器
生物识别 指导
计时器 指导
手电筒 指导
陀螺仪传感器
湿度传感器
光线传感器
位置传感器
磁场传感器
NFC
方向传感器
计步器
距离传感器
定时任务 指导
声音测量仪 指导
温度传感器
加速度传感器
不可见组件,可检测振动并使用 SI 单位(m/s2)在三个维度上近似测量加速度。其组成部分是:
-
X分量:当手机静止在平坦表面上时为 0,当手机倾斜时为正向右(即左侧抬起),当手机倾斜到右侧时为负向左(即,其右侧尺寸升高)。
-
Y分量:当手机静止在平坦表面上时为0,当底部抬起时为正,当其顶部升起时为负。
-
Z分量:等于 -9.8(当设备处于每秒状态时,地球重力以米每秒为单位)
静止时与地面平行且显示屏朝上,0 时垂直于地面,面朝下时+9.8。 该值也可能受到加速或反对的影响重力。
属性
- 可用状态
- 返回
加速度传感器硬件在设备上是否可用。 - 启用
- 指定传感器是否触发事件。如果
真,传感器将触发事件;否则,即使设备加速或晃动,也不会触发任何事件。 - 兼容模式
- 在添加此属性的版本之前,
加速度传感器组件直接传递从 Android 系统接收到的传感器值。然而,这些值无法补偿默认为横向模式的平板电脑,需要 MIT App Inventor 程序员进行补偿。但是,在手机等纵向模式设备中进行补偿会导致结果不正确。我们现在检测横向模式平板电脑并执行补偿。但是,如果你的项目已经补偿了,将会得到不正确的结果。
虽然我们的首选解决方案是让你更新项目,但你也可以将此属性设置为
真,我们的补偿代码将被停用。注意:我们建议你更新你的项目,因为我们可能会在将来的版本中删除此属性。
中文网注:新建的项目不用关注此属性,无视它就行。
- 最小间隔(毫秒)
- 指定连续的
被晃动事件之间所需的最小间隔(以毫秒为单位)。一旦手机开始晃动,所有进一步的
被晃动事件都将被忽略,直到间隔结束。 - 敏感度
- 指定
加速度传感器的灵敏度。有效值 含义 1 弱 2 中等 3 强 - X分量
- 返回 X 维度的加速度,以 SI 单位 (m/s²) 表示。
必须启用传感器才能返回有意义的值。
- Y分量
- 返回 Y 维度的加速度,以 SI 单位 (m/s²) 表示。
必须启用传感器才能返回有意义的值。
- Z分量
- 返回 Z 维度的加速度,以 SI 单位 (m/s²) 表示。
必须启用传感器才能返回有意义的值。
事件
- 加速度变化时(X分量,Y分量,Z分量)
- 指示 X、Y 和/或 Z 维度上的加速度变化。
- 被晃动时()
- 表示设备开始晃动或持续晃动。
方法
无
条码扫描器
用于扫描 QR 码并返回结果字符串的组件。
除了打开摄像头扫码,还可以用扫描图片直接识别相册照片、截图或素材里的条码 / 二维码, 一张图里有多个码时全部返回(不需要额外的拓展和文件权限配合)。
反之,生成二维码 / 条形码用二维码生成组件。
使用指导摄像头扫码与从相册图片识别二维码、一图多码、识别失败排查查看 →
属性
- 结果
- 获取上次扫描的文本结果。
- 使用外部扫描仪
- 设置是否要使用外部扫描程序,例如扫码机。 如果为
假,则将会使用已集成到 App Inventor 中的 ZXing 的某个版本(注:ZXing是一个开源Java类库用于解析多种格式的1D/2D条形码)。默认为假。
事件
- 扫描结束(返回结果)
- 表示扫描仪已读取(文本)结果并提供结果。
- 图片扫描完成(结果,格式列表)
- 扫描图片完成。
结果是识别出的内容(一张图有几个码就有几项),格式列表是对应的条码格式(如QR_CODE、EAN_13、CODE_128)。只有一个码时取结果的第 1 项即可;结果属性同时更新为第 1 项。 - 未找到条码(图像位址)
- 扫描图片没在图片里找到条码 / 二维码,
图像位址是传入的图片。常见原因:码太小、太模糊、被遮挡或拍歪;截图和生成的码一般都能识别。
方法
- 执行扫描()
- 使用相机开始扫描条形码。扫描完成后,将触发 扫描结束 事件。
- 扫描图片(图像位址)
- 识别一张图片里的条码 / 二维码,不需要打开摄像头。图片可以是素材文件名、图像选择器或照相机返回的路径、本地路径。识别完成触发图片扫描完成;没找到码触发未找到条码;图片读不出来触发屏幕的「出现错误时」(错误码 701)。安卓用 ZXing、iOS 用系统 Vision、鸿蒙用系统扫码服务识别。
气压传感器
如果硬件支持,可以测量环境气压的物理世界组件。
属性
- 气压
- 如果传感器可用并已启用,则返回以 hPa(毫巴)为单位的大气压力。
- 可用状态
- 指定设备是否具有支持
气压传感器组件的硬件。 - 启用
- 指定传感器是否触发事件。 如果为
真,传感器将触发事件;否则,不会触发任何事件。 - 刷新时间
- 所请求的读数变化之间的最短时间(以毫秒为单位)。
事件
- 气压改变时(气压值)
- 当检测到气压(以 hPa 为单位)发生变化时触发该事件。
方法
无
生物识别
不可见组件:弹出系统的指纹或人脸验证框,确认是本机主人在操作。
常用于登录、查看隐私内容、付款或删除前的二次验证。验证界面、重试次数、失败锁定都由系统负责, 应用拿不到任何指纹或人脸数据,只知道验证是否通过。需要 Android 9 及以上。
使用指导生物识别:弹出系统的指纹或人脸验证框,确认是本机主人在操作,常用于登录、查看隐私内容、支付确认前的二次验证查看 →
快速上手
放一个生物识别、一个按钮、一个标签。点按钮验证,通过后显示隐私内容;本机不支持时提示改用密码:
when 按钮1.Click() {
if (生物识别1.IsAvailable()) {
生物识别1.Authenticate("查看隐私内容", "请验证指纹或人脸")
} else {
标签1.Text = "本机不支持指纹或人脸,请用密码登录"
}
}
when 生物识别1.AuthSucceeded() {
标签1.Text = "验证通过"
}
when 生物识别1.AuthFailed(消息) {
标签1.Text = join("验证未通过:", 消息)
}
注意:它只能确认「是这台手机的主人」,不能区分是谁,也不能代替账号登录。 需要联网登录的应用,通常第一次用账号密码登录,之后再用生物识别快速解锁。
属性
- 允许锁屏密码
- 默认不勾选。勾选后验证框提供「使用锁屏密码」:没录指纹人脸、或多次识别失败时可以改用锁屏密码 / 图案通过。 Android 10 及以上生效。
事件
- 验证失败时(消息)
- 验证没有通过时触发,
消息为原因:用户取消、失败次数过多请稍后再试、没有录入指纹或人脸、设备不支持、系统版本过低等。指纹或人脸比对不上时系统会在框内提示重试,不触发本事件;只有这次验证结束了才触发。
- 验证成功时()
- 验证通过时触发。
方法
- 开始验证(标题,副标题)
- 弹出系统验证框。
标题为空时显示「身份验证」,副标题可留空。上一次验证还没结束时直接触发验证失败时。 - 是否可用()
- 本机能否进行生物识别:系统版本支持、有指纹或人脸硬件、并且已经录入。勾选了允许锁屏密码时,设置了锁屏密码也算可用。 返回假时应提供其它登录方式。
平台说明
- 安卓:Android 9 及以上可用,更低版本调用开始验证会直接触发验证失败时(系统版本过低);支持指纹和系统级人脸识别。
- 鸿蒙:使用系统统一认证控件(人脸、指纹,勾选允许锁屏密码时加锁屏密码),积木写法完全相同; 鸿蒙的验证框只有一行标题,副标题会接在标题后面显示。
计时器 示例
不可见组件,使用手机内部时钟提供实时时间。可以设置时间间隔以定期触发计时器,并执行时间计算、操作、和转换。
对日期和时间的操作,比如来自日期选择器和时间选择器,
通过计时器的方法实现。日期和时间表示为“即时时间” 和“持续时间”。
- 即时时间: 由 年、月、日、时、分、秒 组成。 即时时间可以使用
由文本建时间点、由毫秒建时间点和由元件建时间点方法。 - 持续时间: 即时时间经过的时间(以毫秒为单位),持续时间可以通过
持续时间方法获得。
即时时间假定在设备的本地时区,当它们被创建就表示它是从1970年1月1日(UTC格林威治标准时间)开始到现在的毫秒数。
通过调用方法可以将即时时间转换为文本,格式可以是空字符串、MM/dd/YYYY HH:mm:ss a 或 MMM d, yyyy HH:mm。空字符串将提供默认格式,对于 格式化日期时间是
"MMM d, yyyy HH:mm:ss a",格式化日期是"MMM d, yyyy"。要查看所有可能的格式,
请请参阅此处。
关于合并日期和时间的注意项:为了合并来自另一个即时时间的日期和时间,例如来自日期选择器和
时间选择器,将部分提取为文本,并使用文本来创建一个新的即时时间。例如:

一个完整的60秒倒计时案例,效果如下:

60秒倒计时完整代码块如下:

逻辑解释:计时器间隔设置为1秒(1000毫秒),每秒触发一次计时事件,事件中将计时变量自增一下,标签显示剩余秒数,当计数到了60,则停止计时器并提醒倒计时结束。
使用指导倒计时、定时与定点执行、多个定时任务、时间格式化的常见问答查看 →
属性
- 一直计时
- 如果为
真,即使App未显示在屏幕上也会触发计时。 - 启用计时
- 指定是否运行计时器,触发
计时事件。 - 计时间隔(毫秒)
- 指定后续
计时事件之间的间隔毫秒数。注意:随着时间的推移可能会发生漂移,如果手机上的应用程序或其他进程繁忙,此处指定的时间间隔系统可能会不遵守。
事件
- 计时()
- 计时事件开始运行,直至关闭为止。
方法
- 增加日(时刻,数量)
- 返回给定时刻几天后的某个时刻。
- 增加时段(时刻,数量)
- 返回参数指定的一段时间后的时刻。
- 增加时(时刻,数量)
- 返回给定时刻几小时后的时刻。
- 增加分(时刻,数量)
- 返回给定时刻几分钟后的时刻。
- 增加月(时刻,数量)
- 返回给定时刻几个月后的时刻。
- 增加秒(时刻,数量)
- 返回给定时刻几秒后的时刻。
- 增加周(时刻,数量)
- 返回给定时刻几周后的时刻。
- 增加年(时刻,数量)
- 返回给定时刻几年后的时刻。
- 求日期(时刻)
- 返回该月的第几天。
- 持续时间(开始时刻,结束时刻)
- 返回结束与开始之间的毫秒数(正数 或 负数)。
- 持续时间转换为天(持续时间)
- 返回持续时间由毫秒转换为天的数值。
- 持续时间转换为小时(持续时间)
- 返回持续时间由毫秒转换为小时的数值。
- 持续时间转换为分钟(持续时间)
- 返回持续时间由毫秒转换为分钟的数值。
- 持续时间转换为秒(持续时间)
- 返回持续时间由毫秒转换为秒的数值。
- 持续时间转换为周(持续时间)
- 返回持续时间由毫秒转换为周的数值。
- 日期格式(时刻,模式)
- 将即时时间格式化为指定格式的日期字符串。有效的格式请查阅简单日期格式.
- 日期时间格式(时刻,模式)
- 将即时时间格式化为指定格式的日期时间字符串。有效的格式请查阅简单日期格式.
- 时间格式(时刻)
- 将即时时间格式化为指定格式的时间字符串。有效的格式请查阅简单日期格式.
- 获取毫秒数(时刻)
- 返回即时时间自 UTC(世界标准时间)1970年以来的毫秒数。
- 求小时(时刻)
- 返回给定时间中的小时数。
- 创建日期(年,月,日)
- 返回按 UTC(世界标准时间)格式的年、月、日指定的即时时间。月份字段的有效值为 1-12,日期字段的有效值为 1-31。
- 由文本建时间点(从)
- 返回指定
MM/dd/YYYY hh:mm:ss或MM/dd/YYYY或hh:mm格式时间文本的即时时间。注意:时间文本不是以上3种格式的话,会报错:

- 由毫秒建时间点(毫秒数)
- 返回 UTC(世界标准时间)1970年指定毫秒数之后的即时时间。
- 由元件建时间点(年,月,日,时,分,秒)
- 返回由指定的年、月、日、时、分、秒指定的 UTC(世界标准时间)即时时间。
- 创建时间(时,分,秒)
- 返回按 UTC(世界标准时间)格式的时、分、秒指定的即时时间。
- 求分钟(时刻)
- 返回给定日期中的分钟数。
- 求月份(时刻)
- 返回给定日期中的月份数。
- 求月份名(时刻)
- 返回给定日期中的月份名称。如
“十月”。 - 求当前时间()
- 返回从
手机时钟读取的当前时刻。 - 求秒数(时刻)
- 返回给定日期中的秒数。
- 求系统时间()
- 返回
手机的内部时间。 - 求星期(时刻)
- 返回给定日期中的星期数。对应关系如下:
星期 日 一 二 三 四 五 六 数值 1 2 3 4 5 6 7 - 求星期名(时刻)
- 返回给定日期中的星期名称,如
“星期二”。 - 求年份(时刻)
- 返回给定日期中的年份数,如
2023。
手电筒
不可见组件:打开、关闭、切换设备闪光灯,或查询当前状态。
实现使用 Android 6.0 的 CameraManager.setTorchMode:不打开相机、无需相机 权限、不与正在使用摄像头的逻辑抢资源。Android 6.0 以下设备调用会弹出错误提示。
使用指导开关按钮、SOS 闪烁、光线暗时自动开灯的完整案例查看 →
快速上手
拖一个手电筒到屏幕,放一个按钮,搭下面的代码块:
when 按钮_开关.Click() {
手电筒1.Toggle()
}
点一下按钮开灯,再点一下关灯。想知道当前状态(比如恢复界面时显示「手电筒已开」):
when Screen1.Initialize() {
if 手电筒1.IsOn() {
标签_状态.Text = "手电筒已开"
} else {
标签_状态.Text = "手电筒已关"
}
}
常见问题
| 现象 | 检查 |
|---|---|
| 弹「手电筒操作失败」 | 设备没有闪光灯(大部分平板、部分低端机);或闪光灯被其它应用占用 |
| 弹「需要 Android 6.0 及以上」 | 内置版依赖系统的 setTorchMode 接口(Android 6.0 引入) |
| 联机调试点块没反应 | 伴侣版本太旧,不含本组件(打包 APK 不受影响) |
属性
无
事件
无
方法
- 是否开启()
- 返回手电筒当前是否处于打开状态。
- 关灯()
- 关闭手电筒。已关闭时再次调用无效果。
- 开灯()
- 打开手电筒。已打开时再次调用无效果。
- 切换开关()
- 切换手电筒状态(开变关,关变开)。
陀螺仪传感器
提供来自设备陀螺仪传感器的数据的组件。
属性
- 可用状态
- 陀螺仪传感器是否可用。
- 启用
- 指定传感器是否触发事件。 如果为
真,传感器将触发事件;否则,不会触发任何事件。 - X分量角速度
- 绕 X 轴的角速度,以 度/秒 为单位。
- Y分量角速度
- 绕 Y 轴的角速度,以 度/秒 为单位。
- Z分量角速度
- 绕 Z 轴的角速度,以 度/秒 为单位。
事件
- 陀螺仪状态改变时(x分量角速度,y分量角速度,z分量角速度,时间戳)
- 表明陀螺仪传感器数据已更改。 时间戳参数是事件发生的时间(以纳秒为单位)。
方法
无
湿度传感器
如果硬件支持,可以测量相对环境空气湿度的物理世界组件。
属性
- 可用状态
- 指定设备是否具有支持
湿度传感器组件的硬件。 - 启用
- 指定传感器是否触发事件。 如果
真,传感器将触发事件;否则,不会触发任何事件。 - 湿度
- 以百分比形式返回相对环境湿度。
传感器必须可用并启用,才能返回有意义的值。
- 刷新时间
- 所请求的读数变化之间的最短时间(以毫秒为单位)。 Android 不保证会满足该请求。
事件
- 湿度改变时(湿度值)
- 表示相对湿度的变化。
方法
无
光线传感器
可以测量光水平的物理世界组件。
属性
- 可用状态
- 指定设备是否具有支持
光线传感器组件的硬件。 - 照度
- 返回最后测量的照度值(以 lux 为单位)。
传感器必须可用并启用,才能返回有意义的值。
- 平均照度
- 通过计算前 10 个测量值的平均值,返回照度值(以 lux 为单位)。
传感器必须可用并启用,才能返回有意义的值。
- 启用
- 指定传感器是否触发事件。 如果为
真,传感器将触发事件;否则,不会触发任何事件。 - 刷新时间
- 所请求的读数变化之间的最短时间(以毫秒为单位)。 Android 不保证会满足该请求。
事件
- 光线变化时(照度值)
- 亮度级别发生变化时触发该事件。
方法
无
位置传感器 示例
不可见组件,提供位置信息,包括:
纬度, 经度、 海拔(如果设备支持)、速度(如果设备支持) 和地址。
也可以执行“地理编码”,转换给定的地址(不限于当前地址)到纬度(使用 由地址求纬度方法)和经度(使用 由地址求经度 方法)。
中文网注:如果获取不了经纬度,请尝试开启一下定位权限,参考代码如下:

为了发挥作用,组件必须将其 启用 属性设置为真,并且设备必须通过无线网络启用定位感应器 或 GPS 卫星(如果在室外)。
应用程序启动时,位置信息可能无法立即可用。你必须稍微等一下找到并使用位置提供者,或者等待位置改变时 事件。
模拟器并不模拟所有设备上的传感器,App应该在物理设备上进行测试。
位置传感器 支持两种坐标体系:GPS坐标(WGS84) 和 高德坐标(GCJ02)。如果需要原始 GPS 坐标,请使用 GPS坐标(WGS84);如果结果要显示在高德地图上,或用于国内常见地图服务,请使用 高德坐标(GCJ02)。当它与 地图 一起使用时,建议两个组件保持相同的坐标体系。
属性
- 精度
位置传感器将能够根据卫星、手机信号塔和其他用于估计位置的数据的质量,以不同程度的置信度来定位设备。“精度”值是传感器检测到的位置周围的半径(以米为单位)。该设备有 68% 的机会位于该半径内。更精确的位置检测将导致更小的精度数字,这使得应用程序对设备实际所在的位置更有信心。
如果精度未知,则返回值为 0.0。
- 海拔
- 设备的海拔高度(以米为单位)(如果有)。
海拔高度是根据 世界大地测量系统 84 参考椭球体 测量的,而不是海平面。
请注意,设备很难准确地感知海拔高度。手机/平板电脑上报告的海拔高度很容易偏离 30 米或更多。
- 可用提供者
- 可用服务提供者的列表,例如 GPS 或网络。 此信息以列表和文本形式提供。
- 坐标体系
- 设置位置传感器输出经纬度所使用的坐标体系。
GPS坐标(WGS84)返回原始 GPS 坐标。高德坐标(GCJ02)返回适合高德地图及火星坐标体系地图服务使用的坐标。此设置会影响
纬度、经度、位置改变时事件,以及地理编码相关方法返回的坐标。若与地图组件一起使用,建议两者保持相同的坐标体系。 - 当前地址
- 来自地图数据库的设备的实际街道地址。
提供者可能并不总是提供该地址,并且报告的地址可能并不总是设备所在建筑物的地址。
如果没有特定位置的可用地址信息,则会返回“无可用地址”。
- 距离间隔
- 确定传感器尝试用于发送位置更新的最小距离间隔(以米为单位)。
例如,如果设置为 50,则传感器仅在穿过 50 米后才会触发
位置改变时事件。 然而,传感器不保证在精确的距离间隔处接收到更新。 例如,触发一个事件可能需要超过 5 米。使用此属性时,检查
精度也很有用。 当你的设备移动时,检测到的位置的准确性会不断变化。 - 启用
- 如果为
真,则位置传感器将尝试从 GPS、WiFi 位置或设备上可用的其他方式读取位置信息。 此设置不控制位置信息是否实际可用。 必须在设备设置中启用或禁用设备定位。 - 拥有精度数据
- 如果为
真,则设备可以报告其精度级别。 - 拥有海拔数据
- 如果为
真,则设备可以报告其海拔高度。 - 拥有经纬度数据
- 如果为
真,则设备可以报告经度和纬度。它们是一起的,要么两者都报告,要么都不报告。 - 纬度
- 最近可用的纬度值(以度为单位)报告到小数点后 5 位。
如果没有可用值,则返回 0。
纬度是 90(北)和 -90(南)之间的值,其中 0 表示赤道。
- 经度
- 最新可用的经度值(以度为单位)报告到小数点后 5 位。
如果没有可用值,则返回 0。
经度是 180(东)和 -180(西)之间的值,其中 0 表示本初子午线。
- 锁定提供者
- 指定设备是否会自动切换服务提供者。
当当前提供者无法提供足够的位置信息时,设备可以切换服务提供者。
设置为
真以防止提供者更改;设置为假以允许在必要时自动切换。 - 提供者名称
- 当前的服务提供者。提供者很可能是 GPS 或网络。
- 时间间隔(毫秒)
- 确定传感器尝试用于发送位置更新的最小时间间隔(以毫秒为单位)。 但是,只有当手机位置实际发生变化时才会收到位置更新,并且不保证指定时间间隔的使用。 例如,如果使用 30000 作为时间间隔,则位置更新永远不会早于 30000 毫秒触发,但可能会在之后的任何时间触发。
对于大多数设备来说,小于 30000 毫秒(30 秒)的值不实用。 较小的值可能会耗尽电池电量并使 GPS 过度工作。
事件
- 获得地址(地址)
- 响应
逆地理编码请求的地址。 - 从地址获取位置(地址,纬度,经度)
- 响应
地理编码请求的纬度和经度。 - 位置改变时(纬度,经度,海拔,速度)
- 表示已检测到新位置。
速度以米/秒为单位。 - 状态改变时(提供者,状态)
- 表示位置提供者服务的状态已更改,例如当提供者丢失或开始使用新提供者时。
方法
- 地理编码(地址)
- 将地址转换为纬度和经度,通过
从地址获取位置事件获取。 - 逆地理编码(纬度,经度)
- 逆地理编码,是指将地理位置(经纬度)转换为具体的地址信息,例如街道名称、城市名称等,通过
获得地址事件获取。 - 由地址求纬度(位置名称)
- 从给定的“位置名称”导出纬度。
- 由地址求经度(位置名称)
- 从给定的“位置名称”导出经度。
磁场传感器
磁场传感器组件。
属性
- 绝对强度
- 表示磁场的绝对强度。
- 可用状态
- 表示设备中有磁场传感器并且可用。
- 启用
- 表示磁场传感器是否已启用并工作。
- 最大范围
- 表示磁传感器可以达到的最大范围。
- X分量强度
- 表示 X 轴上的磁场强度。
- Y分量强度
- 表示 Y 轴上的磁场强度。
- Z分量强度
- 表示 Z 轴上的磁场强度。
事件
- 磁场改变时(X强度,Y强度,Z强度,绝对强度)
- 当磁场发生变化时触发,在参数中设置新值。
方法
无
NFC
提供 NFC 功能的不可见组件。目前该组件仅支持读写文本标签(如果设备支持)。
设置 启用读值模式 属性为 真 是读取模式;设置 假 则是写入模式。
注意: 该组件仅适用于应用程序的 Screen1 主屏幕!!
属性
- 最新消息
- 返回最近接收到的标签的内容。
- 启用读值模式
- 指定 NFC 硬件是否在读取模式下运行。读取模式 (
真) 或 写入模式(假)。 - 写入文本
- 指定在写入模式下将要写入标签的内容。如果没有设置
启用读值模式为真,则该方法没有效果。 - 写入类型
- 返回 NFC 组件的写入类型。对于此版本的组件,它始终是
1。
事件
- 读标签(消息)
- 表示检测到新标签,目前只支持纯文本标签。
- 写标签()
- 表示标签已进入 NFC 传感器的范围并已被写入。
方法
无
方向传感器
使用方向传感器组件来确定手机的空间方向。
方向传感器是一个不可见的组件,它报告以下三个值(以度为单位):
- 滚动:设备水平时为 0 度,当设备向左侧向上倾斜时增加至 90 度,当设备向右侧向上倾斜时减少至 -90 度。
- 俯仰:设备水平时为 0 度,当设备倾斜时增加到 90 度,使其顶部朝下,然后在翻转时减小到 0 度。 类似地,当设备倾斜时,其底部朝下,俯仰角减小到 -90 度,然后在完全翻转时增加到 0 度。
- 方位角:设备顶部指向北时为 0 度,指向东时为 90 度,指向南时为 180 度,指向西时为 270 度等。
这些测量假设设备本身没有移动。
属性
- 角度
- 返回一个角度,指示设备平铺的方向。也就是说,它告诉了在设备表面滚动的球所感受到的力的方向。
- 可用状态
- 指示设备上是否存在方向传感器。
- 方位角
- 返回设备的方位角。
要返回有意义的值,必须启用传感器。
- 启用
- 指定是否启用方向传感器。
- 力度
- 返回 0 到 1 之间的数字,指示设备倾斜的程度。它给出了球在设备表面滚动时感受到的力的大小。
对于倾斜角度,请使用
角度。 - 倾斜角
- 返回设备的倾斜角。
要返回有意义的值,必须启用传感器。
- 翻转角
- 返回设备的滚动角度。
要返回有意义的值,必须启用传感器。
事件
- 方向改变时(方位角,倾斜角,翻转角)
- 当方向发生变化时,将触发该事件。
方法
无
计步器
该组件使用 加速度传感器 来记录步数。
属性
- 距离
- 返回以米为单位的大致行驶距离。
- 耗时
- 返回自计步器启动以来经过的时间(以毫秒为单位)。
- 简单步数
- 返回自计步器启动以来发生的简单步数。
- 停止检测超时时间
- 返回多长时间(以毫秒为单位)未检测到步数之后进入停止检测状态。
- 步幅
- 如果已校准,则返回步幅长度的当前估计值(以米为单位),否则返回默认值 (0.73 m)。
- 行走步数
- 返回自计步器启动以来所走的步数。
事件
- 检测简单步数时(简单步数,距离)
- 当检测到原始步骤(raw step)时运行此事件。
- 检测行走步数时(行走步数,距离)
- 当检测到步行步骤(walking step)时触发此事件。步行步骤是看起来涉及向前运动的步骤。
方法
- 复位()
- 重置计步器、距离测量和跑步时间。
- 保存()
- 将计步器状态保存至手机。允许累积步数和调用使用计步器的应用程序之间的距离。不同的应用程序将有自己的保存状态。
- 开始()
- 启动计步器。
- 停止()
- 停止计步器。
距离传感器
用于测量物体相对于设备屏幕距离(以cm厘米为单位)的传感器组件。该传感器通常用于检测手机听筒是否处于耳边接听状态。 大多数设备返回绝对距离(以cm厘米为单位),但也有些设备仅返回近值和远值,在这个情况下,传感器通常报告其在远距离状态下的最大范围值 和 近距离状态下较小的值。 它报告以下值:
- 距离: 物体到设备之间的距离。
属性
- 可用状态
- 报告当前设备是否有距离传感器。
- 距离
- 返回对象到设备之间的距离。必须启用传感器才能返回有效值。
- 启用
- 如果为真,传感器将触发事件,否则,不触发事件。
- 暂停时保持运动
- 返回“暂停时保持运动”属性值。
- 最大范围
- 确定传感器的最大范围。一些距离传感器返回二进制值代表“近”或“远”,在这种情况下,传感器通常会报告它在远距离状态下的最大范围值 和 近距离状态下较小的值。 通常,远值是 > 5 cm 的值,但不同的传感器可能有差异。
事件
- 距离改变(距离)
- 当对象与设备的距离(以cm厘米为单位)发生变化时触发该事件。
方法
无
定时任务
不可见组件:到指定时刻触发到点事件——某个时刻一次、每天几点、每周几的几点、每隔几分钟。 设置了通知标题或通知文字时,App 不在前台也会到点弹一条通知。
积木只能在 App 运行时执行,所以到点时分两种情况:
| 到点时 App 的状态 | 发生什么 |
|---|---|
| 开着(在前台) | 立即触发「到点」,是否补发为假 |
| 在后台或已关掉 | 系统到点弹通知(设置了通知文字才弹);用户点通知或下次打开这个屏幕时补发「到点」,是否补发为真 |
排定的任务会保存下来:App 被关掉、手机重启后照样到点。每个任务用一个编号(整数)区分,编号在每个屏幕内独立; 同一编号再排就替换原来的任务,所以在 Screen1.Initialize 里排任务不会越排越多。 勾选到点打开屏幕可以做闹钟:到点亮屏、直接打开这个屏幕并显示在锁屏上方。 做不到的事:App 关掉后在后台跑积木(例如定时上传数据)。 本组件合并了第三方拓展 UrsAI2Alarm 的常用功能。
使用指导定时任务:到指定时刻(一次、每天、每周几、每隔几分钟)触发「到点」事件;App 不在前台时可弹通知提醒,点通知或下次打开 App 时补发事件查看 →
快速上手:每天 8 点打卡提醒
拖一个定时任务到屏幕,通知标题填「打卡」、通知文字填「该打卡了」:
when Screen1.Initialize() {
定时任务1.ScheduleDaily(1, 8, 0)
}
when 定时任务1.Fired(编号, 是否补发) {
if 是否补发 {
标签1.Text = "你错过了今天 8 点的打卡提醒"
} else {
对话框1.ShowAlert("该打卡了")
}
}
工作日提醒与取消
星期列表用 1(周一)到 7(周日)。下面每个工作日 21:30 提醒写日报,开关控制开启或取消:
when 开关1.Changed() {
if 开关1.On {
定时任务1.ScheduleWeekly(2, [1, 2, 3, 4, 5], 21, 30)
} else {
定时任务1.Cancel(2)
}
}
某个时刻提醒一次:用计时器的「由元件建时间点」生成时刻,例如 2026 年 10 月 1 日 9 点:
when 按钮1.Click() {
定时任务1.ScheduleOnce(3, 计时器1.MakeInstantFromParts(2026, 10, 1, 9, 0, 0))
}
闹钟:到点打开界面
到点打开屏幕勾选为真,通知文字填「该吃药了」。安卓 10 起要先让用户允许后台打开界面(小米手机会打开应用权限页, 请用户同时打开「后台弹出界面」和「显示悬浮窗」):
when 按钮_设闹钟.Click() {
if 定时任务1.HasLaunchPermission() {
定时任务1.ScheduleDaily(1, 7, 30)
对话框1.ShowAlert("已设好每天 7:30 的闹钟")
} else {
定时任务1.RequestLaunchPermission()
}
}
when 定时任务1.LaunchPermissionResult(已授权) {
if 已授权 {
定时任务1.ScheduleDaily(1, 7, 30)
} else {
对话框1.ShowAlert("没有授权时只在锁屏或熄屏状态下打开界面")
}
}
when 定时任务1.Fired(编号, 是否补发) {
if not(是否补发) {
音效1.Play()
标签1.Text = "该吃药了"
}
}
到点时屏幕被拉起、点亮并盖在锁屏上方,「到点」事件里的积木负责响铃和显示内容;用户离开这个界面后恢复正常锁屏。
属性
- 准点
- 为假(默认)时系统可能推迟几分钟触发以省电,不需要权限;为真时准点触发。 安卓 12 及以上要用户在设置里允许「闹钟和提醒」(见申请准点权限),没允许时自动按普通精度。
- 通知文字
- 到点时 App 不在前台要弹的通知文字。在排任务时记下,之后再改不影响已排好的任务。
- 到点打开屏幕
- 为真时到点自动打开发任务的这个屏幕(App 关着也会启动),亮屏并显示在锁屏上方,适合闹钟、吃药提醒。 安卓 10 起需要先用申请打开界面权限取得授权;没有授权时退回全屏通知, 只在锁屏或熄屏时打开界面(需要设置通知标题或文字)。准时打开时「到点」的是否补发为假。在排任务时记下。
- 通知标题
- 到点时 App 不在前台要弹的通知标题。通知标题和通知文字都留空时不弹通知,只在 App 开着时触发事件。
事件
- 到点时(编号,是否补发)
- 任务到点。是否补发为真表示到点时 App 没在运行(或手机关着机),这是点通知或重新打开 App 时补发的, 每个到点只补发一次。
- 打开界面权限结果(已授权)
- 调用申请打开界面权限、用户从设置页回到 App 后触发。
方法
- 取消(编号)
- 取消本屏幕指定编号的任务,并收起它弹出的通知。
- 全部取消()
- 取消本屏幕排定的全部任务。
- 能否准点()
- 能否准点触发。安卓 12 以下和鸿蒙总是真。
- 能否打开界面()
- 能否在后台直接打开界面(到点打开屏幕要用)。安卓 10 以下和鸿蒙总是真; 安卓 10 起要允许「显示在其他应用的上层」。小米手机另需「后台弹出界面」,这一项查不到,只能引导用户去设置里打开。
- 下次到点时刻(编号)
- 指定任务下一次到点的时刻(毫秒数,可用计时器的「由毫秒建时间点」转成时间点再格式化);没有这个任务时返回 0。
- 申请打开界面权限()
- 打开系统设置让用户允许后台打开界面(小米手机打开应用权限页),用户回到 App 后触发打开界面权限结果。
- 申请准点权限()
- 打开系统设置的「闹钟和提醒」页,让用户允许准点触发。已有权限时什么也不做。
- 每天(编号,时,分)
- 每天几点几分触发(24 小时制)。
- 已排定编号()
- 本屏幕已排定、还没结束的任务编号列表,从小到大。
- 定时一次(编号,时刻)
- 在指定时刻触发一次。时刻已经过去会报错。
- 每隔几分钟(编号,间隔分钟)
- 从现在起每隔几分钟触发一次,最短 15 分钟(系统不允许更频繁地唤醒)。App 开着时要更频繁地做事,请用计时器。
- 每周(编号,星期,时,分)
- 每周指定几天的几点几分触发。星期是列表,1=周一 … 7=周日(注意与计时器「求星期」的 1=周日不同),例如工作日是 1 到 5。
平台说明
- 安卓:用系统闹钟服务排期,重启手机后自动重新排上。准点为假时可能晚几分钟,省电模式下可能更久。 部分国产手机需要在设置里允许本应用「自启动」、省电策略设为「无限制」,否则 App 被划掉后可能不响。 用到「准点」属性或准点权限积木时,应用清单才会声明精确闹钟权限;用到「到点打开屏幕」或打开界面权限积木时,才声明悬浮窗与全屏通知权限。
- 鸿蒙:通知由系统提醒代理准点弹出(App 开着时也会弹);App 退到后台后积木暂停,回到前台时补发这段时间到点的任务。 「每隔几分钟」在 App 关着时只提醒下一次,打开 App 后继续按节拍排。每个应用最多 30 条系统提醒。 到点打开屏幕由系统决定:设备未在使用(锁屏、熄屏)时自动打开应用,正在使用时只弹提醒,不需要额外权限。
声音测量仪
不可见组件:用麦克风实时测量声音大小(分贝)和音高(频率、音名),可以做噪音计、调音器,或者用吹口哨、拍手控制 App。完全离线,不上传声音。
- 分贝:16 位录音的均方根换算成分贝,再加「校准偏移」(默认 90)。手机麦克风没有出厂校准,测出的是近似值,适合比较「哪里更吵」;要接近专业分贝计,就在同一位置对比后调「校准偏移」。
- 音高:用 YIN 算法从声音里找基频,给出频率、最接近的音名(A4 = 440Hz)和音分偏差(正为偏高),人声、乐器、口哨都能测;低于「静音阈值」或没有明确音高(噪声)时不报。
- 把「启用」设为真开始测量,首次会申请录音权限;App 退到后台自动停止,回到前台自动恢复。
鸿蒙:完整支持,算法与安卓相同,测量值一致。
快速上手
拖一个声音测量仪和一个标签到屏幕,搭下面的代码块,对着手机说话就能看到分贝和音高:
when Screen1.Initialize() {
声音测量仪1.Enabled = true
}
when 声音测量仪1.SoundLevelChanged(分贝) {
标签1.Text = join(round(分贝), " 分贝")
}
when 声音测量仪1.PitchDetected(频率, 音名, 音分偏差) {
标签2.Text = join(音名, " ", round(频率), " Hz")
}
属性
- 校准偏移
- 分贝校准偏移,默认 90。手机麦克风没有出厂校准,测出的是近似值;要更准就拿真实分贝计在同一位置对比,把差值加到这里。
- 分贝
- 最近一次测到的声音大小(分贝)。
- 启用
- 是否开始测量。设为真时打开麦克风(首次会申请录音权限),设为假时停止。App 退到后台会自动停止,回到前台自动恢复。
- 频率
- 最近一次测到的音高频率(Hz),没有明确音高(噪声、太安静)时为 0。
- 间隔
- 事件最短间隔(毫秒),默认 200,即每秒最多触发 5 次。最小 50。
- 音名
- 最近一次测到的音名,如 A4(440Hz)、C4(中央 C);没有明确音高时为空。
- 静音阈值
- 静音阈值(分贝),默认 40。声音低于它时不检测音高,避免环境噪声误报。
事件
- 检测到音高(频率,音名,音分偏差)
- 检测到明确的音高,按「事件间隔」触发。frequency 是频率(Hz);noteName 是最接近的音名(如 A4);cents 是相对这个音的偏差(音分,-50~50,正为偏高),做调音器用。
- 声音大小变化(分贝)
- 声音大小变化,按「事件间隔」触发。decibels 是当前分贝(近似值,受「校准偏移」影响)。
- 测量出错(错误信息)
- 测量出错,如没有录音权限、麦克风被其它应用占用。
方法
- 频率转音名(频率)
- 把频率(Hz)换算成最接近的音名,如 440 → A4、261.6 → C4。按十二平均律、A4 = 440Hz。频率不大于 0 时返回空。
温度传感器
可以测量环境空气温度的物理组件(如果硬件支持)。
属性
- 可用状态
- 指定设备是否具有支持“温度计”组件的硬件。
- 启用
- 指定传感器是否触发事件。 如果为
真,传感器将触发事件;否则,不会触发任何事件。 - 刷新时间(毫秒)
- 所请求的读数变化之间的最短时间(以毫秒为单位)。Android 不保证会满足该请求。
- 温度
- 返回以摄氏度为单位的温度。
传感器必须启用并可返回有意义的值。
事件
- 温度改变时(温度值)
- 表示温度发生变化,以摄氏度为单位。
方法
无
扫码添加客服咨询