HarmonyOS7 传感器开发:加速度计做个摇一摇,原来这么简单
文章目录前言传感器能做什么权限声明加速度计接入摇一摇实现完整代码算法讲解采样率与功耗其他传感器速览写在最后前言摇一摇这个功能最早是微信搞出来的结果成了移动端的经典交互。在 HarmonyOS7 上实现摇一摇比我想象的简单多了——加速度计数据就三个值判断逻辑十几行代码回调里加个震动就完事。但传感器开发有不少细节权限怎么申、采样率怎么选、功耗怎么控。这篇从加速度计接入到摇一摇完整实现顺便把其他传感器也扫一遍。传感器能做什么HarmonyOS7 支持的传感器不少常见的这些传感器数据能干啥加速度计x/y/z 三轴加速度摇一摇、计步、屏幕旋转陀螺仪x/y/z 三轴角速度姿态检测、VR 头控磁力计x/y/z 三轴磁场指南针、金属检测接近光距离值通话时熄屏环境光光照强度自动亮度气压计大气压值海拔估算、天气计步器步数运动统计心率BPM健康监测每个传感器的接入方式都一样on订阅 → 回调拿数据 →off取消订阅。套路统一学会一个就会所有。权限声明加速度计需要权限module.json5里加上{requestPermissions:[{name:ohos.permission.ACCELEROMETER}]}这个权限不需要动态申请声明了就行。但心率传感器那类敏感数据需要ohos.permission.HEALTH_DATA那个要动态授权。加速度计接入核心就三步导入模块、订阅数据、取消订阅。import{sensor}fromkit.SensorServiceKitimport{BusinessError}fromkit.BasicServicesKitStateaccelX:number0StateaccelY:number0StateaccelZ:number0privatesubscribed:booleanfalsesubscribeAccelerometer(){try{sensor.on(sensor.SensorId.ACCELEROMETER,(data:sensor.AccelerometerResponse){this.accelXdata.xthis.accelYdata.ythis.accelZdata.z},{interval:200000000})// 采样间隔单位纳秒this.subscribedtrue}catch(error){leteerrorasBusinessErrorconsole.error(订阅失败:${e.code},${e.message})}}unsubscribeAccelerometer(){try{sensor.off(sensor.SensorId.ACCELEROMETER)this.subscribedfalse}catch(error){leteerrorasBusinessErrorconsole.error(取消订阅失败:${e.code})}}关键讲解sensor.SensorId.ACCELEROMETER传感器类型标识加速度计固定用这个data.x / data.y / data.z三轴加速度值单位 m/s²。手机静止平放时z 轴约等于 9.8重力x/y 接近 0{ interval: 200000000 }采样间隔单位是纳秒。200000000ns 200ms也就是每秒采样 5 次。这个值后面详细讲on和off必须成对出现页面销毁时一定记得 off不然后台一直吃电摇一摇实现加速度计接好了摇一摇的判断逻辑很直接——三轴加速度的绝对值之和超过阈值就是摇了。完整代码import{sensor}fromkit.SensorServiceKitimport{vibration}fromkit.VibrationEffectKitimport{BusinessError}fromkit.BasicServicesKitEntryComponentstruct ShakePage{StateshakeCount:number0StateisShaking:booleanfalseprivatelastShakeTime:number0privateSHAKE_THRESHOLD:number18// 加速度阈值privateSHAKE_INTERVAL:number500// 两次摇动最小间隔(ms)privateACCEL_INTERVAL:number50000000// 50ms采样间隔aboutToAppear(){this.startShakeDetection()}aboutToDisappear(){this.stopShakeDetection()}startShakeDetection(){try{sensor.on(sensor.SensorId.ACCELEROMETER,(data:sensor.AccelerometerResponse){constaccelerationMath.abs(data.x)Math.abs(data.y)Math.abs(data.z)constnowDate.now()if(accelerationthis.SHAKE_THRESHOLD!this.isShaking){if(now-this.lastShakeTimethis.SHAKE_INTERVAL){this.isShakingtruethis.lastShakeTimenowthis.onShakeDetected()// 300ms后重置状态避免一次摇动多次触发setTimeout((){this.isShakingfalse},300)}}},{interval:this.ACCEL_INTERVAL})}catch(error){leteerrorasBusinessErrorconsole.error(启动检测失败:${e.code})}}stopShakeDetection(){try{sensor.off(sensor.SensorId.ACCELEROMETER)}catch(error){// ignore}}onShakeDetected(){this.shakeCount// 震动反馈try{vibration.vibrate(vibration.VibrateType.VIBRATOR_LIGHT)}catch(e){// 没有震动模块就算了}}build(){Column({space:20}){Text(摇一摇计数器).fontSize(28).fontWeight(FontWeight.Bold)Text(${this.shakeCount}).fontSize(72).fontColor(#FF6D00).fontWeight(FontWeight.Bold)Button(重置).onClick((){this.shakeCount0})Text(用力摇晃手机试试).fontSize(14).fontColor(#999999)}.width(100%).height(100%).justifyContent(FlexAlign.Center)}}算法讲解核心判断就这一行constaccelerationMath.abs(data.x)Math.abs(data.y)Math.abs(data.z)三轴加速度取绝对值求和。静止时这个值约 9.8纯重力使劲摇的时候能到 25。阈值设 18是个经验值——正常走路大概 12-15不会误触稍微用点力摇就能到 18。两个防抖机制缺一不可SHAKE_INTERVAL 500ms两次触发至少间隔 500ms防止快速连续触发isShaking状态锁 setTimeout(300ms)一次摇动只算一次300ms 内不再响应没有防抖的话一次摇动会触发 5-10 次回调因为采样间隔 50ms计数器直接飞。采样率与功耗采样间隔怎么选这事儿得权衡间隔采样率精度功耗适用场景10000000ns (10ms)100Hz高高游戏、VR50000000ns (50ms)20Hz中中摇一摇、手势识别200000000ns (200ms)5Hz低低屏幕旋转、基础检测1000000000ns (1s)1Hz很低很低后台监控摇一摇用 50ms20Hz刚刚好——采样够密不会漏摇功耗也不会炸。如果你做的是计步器那种长时间运行的建议 200ms 甚至更低不然电池扛不住。真心建议不用的时候一定 off。我见过一个 App 后台跑着传感器没关4 小时掉电 20%。用户骂的你听不见。其他传感器速览加速度计学会了其他传感器套路一模一样换下SensorId就行陀螺仪sensor.SensorId.GYROSCOPE回调里data.x/y/z是角速度磁力计sensor.SensorId.MAGNETIC_FIELD做指南针配合GeomagneticField算偏角接近光sensor.SensorId.PROXIMITY通话时检测脸靠近就熄屏data.distance环境光sensor.SensorId.AMBIENT_LIGHTdata.intensity是勒克斯值计步器sensor.SensorId.PEDOMETERdata.steps直接给你步数不用自己算心率sensor.SensorId.HEART_RATE需要额外权限穿戴设备才支持每种传感器的on/off用法完全一致唯一区别是回调数据的字段名不同。官方文档里有每个传感器的 Response 类型定义查一下就行。写在最后传感器开发真没那么难——on订阅、回调拿数据、off释放三步走天下。摇一摇的实现核心就是加速度阈值判断 防抖十几行代码搞定。但功耗控制和资源释放这些细节才是区分能用和好用的关键——不用就关、采样率别贪高、页面销毁一定 off。下次如果你做计步器、指南针或者体感游戏回来翻这篇就行套路都一样。Camera 那篇如果还没看建议搭配着看传感器 相机组合能做不少有趣的东西。

相关新闻

每天60秒读懂世界|2026年7月23日:50℃极端高温、引力一号一箭9星与全球经贸新变化

每天60秒读懂世界|2026年7月23日:50℃极端高温、引力一号一箭9星与全球经贸新变化

🔥 个人主页: 杨利杰YJlio ❄️ 个人专栏: 《Windows 疑难杂症与工单复盘案例库》 《Sysinternals实战教程》 《WINDOWS教程》 《Windows PowerShell 实战》 《IOS插件分析测试》 《超简单:用Python让Excel飞起来》…

2026/9/22 10:59:52 阅读更多 →
RAG管线四件套:从原始文档到可检索知识

RAG管线四件套:从原始文档到可检索知识

一、概念:什么是 RAG 管线四件套?把原始文档变成可检索知识,需要经过四步:原始文档 ──①──→ 标准文档 ──②──→ 文档片段 ──③──→ 嵌入向量 ──④──→ 向量索引Loader Splitter Embedding Vec…

2026/9/24 17:21:50 阅读更多 →
高斯泼溅技术-从入门到精通

高斯泼溅技术-从入门到精通

自适应密度控制(Adaptive Density Control) 训练从稀疏点云初始化,经过几万步梯度下降,最终得到数百万个高斯体。这中间,高斯体的数量和位置是如何从初始状态演变到最终状态的?答案就是本文的主题——自适…

2026/9/24 15:05:24 阅读更多 →

最新新闻

从烘焙到Lumen:Unity与UE4全局光照技术对比

从烘焙到Lumen:Unity与UE4全局光照技术对比

1. 这轮对比的背景:PBR之后,光照才是渲染的真战场1.1 为什么Part2要单独写全局光照Part1我们聊了Unity URP、HDRP和UE4在PBR材质模型、Shader着色、法线细节上的差异。评论区不少人问:材质表现都差不多了,为什么画面放在一起还是差…

2026/9/25 5:47:35 阅读更多 →
mac配置GLSL(OpenGL Shading Language)开发环境:TaoToken统一Key接入vscode与glslang校验

mac配置GLSL(OpenGL Shading Language)开发环境:TaoToken统一Key接入vscode与glslang校验

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 5:47:35 阅读更多 →
Databasus 仓库 Git 提交规范:FEATURE/FIX/REFACTOR 前缀、分支命名与自动化版本发布工作流

Databasus 仓库 Git 提交规范:FEATURE/FIX/REFACTOR 前缀、分支命名与自动化版本发布工作流

数据库灾备 【免费下载链接】databasus PostgreSQL backup tool with Point-In-Time-Recovery and restore verification 项目地址: https://gitcode.com/gh_mirrors/po/databasus 点击查看 免费下载 本篇指南完整讲解 Databasus 开源仓库的 Git 提交与分支命名约定…

2026/9/25 5:47:35 阅读更多 →
ng-zorro-antd DatePicker 禁用状态实战:nzDisabled、nzDisabledDate 与 nzDisabledTime 全解析

ng-zorro-antd DatePicker 禁用状态实战:nzDisabled、nzDisabledDate 与 nzDisabledTime 全解析

UI组件前端 【免费下载链接】ng-zorro-antd Angular UI Component Library based on Ant Design 项目地址: https://gitcode.com/gh_mirrors/ng/ng-zorro-antd 点击查看 免费下载 本文围绕 ng-zorro-antd 日期选择器(DatePicker)官方示例 禁…

2026/9/25 5:47:35 阅读更多 →
SSE流式传输实战:AI响应、Nginx配置与EventSource健壮封装

SSE流式传输实战:AI响应、Nginx配置与EventSource健壮封装

1. 为什么今天还必须亲手写一个 SSE 服务?不是 WebSocket 更香吗? SSE(Server-Sent Events)这个词最近在 AI 应用开发一线高频出现,但很多人其实只停留在“它能流式输出大模型回答”这个表层认知。我去年带团队重构三…

2026/9/25 5:47:35 阅读更多 →
使用 VoltAgent 构建 YouTube 转博客 Agent:MCP 工具、共享记忆与 Supervisor 编排实战

使用 VoltAgent 构建 YouTube 转博客 Agent:MCP 工具、共享记忆与 Supervisor 编排实战

人工智能AI AgentAgent 框架后端多智能体RAG工具调用Agent 记忆 【免费下载链接】voltagent AI Agent Engineering Platform built on an Open Source TypeScript AI Agent Framework 项目地址: https://gitcode.com/gh_mirrors/vo/voltagent 点击查看 免费下载 本…

2026/9/25 5:46:34 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →