第26章_HarmonyOs开发图解之 设备管理
第26章 HarmonyOs开发图解之 设备管理HarmonyOS 学习系统 | 阶段四专业精通期学习目标序号能力1掌握传感器加速度计、陀螺仪等的数据订阅2能够使用 LightAgent 和 VibratorAgent 控制指示灯和振动器3掌握位置服务的使用和系统设置的监听核心图解内容讲解26.1 设备管理概述HarmonyOS 的设备管理模块涵盖四大方向传感器Sensor、控制类小器件LED/振动器、位置服务Location和系统设置Settings。这些能力让应用能够感知物理世界、控制设备硬件和获取用户位置。生活化类比传感器就像手机的五官加速度计是前庭感知倾斜和运动陀螺仪是内耳感知旋转环境光传感器是眼睛对光的感知温度计是皮肤对温度的感知。而位置服务就像GPS 导航仪——通过卫星GNSS、基站信号像通过附近基站的大声喊话来判断距离和 WLAN 信号像闻到附近 Wi-Fi 的气味来判断位置三种方式来确定你在哪。采样率就像眨眼频率——采样率越高越灵敏但也越费电。26.2 传感器使用// 订阅方向传感器数据SensorAgentsensorAgentSensorAgent.getSensorAgent();booleansuccesssensorAgent.setSensorDataCallback(newSensorDataCallback(){OverridepublicvoidonSensorDataCallback(SensorEventevent){float[]valuesevent.values;HiLog.info(TAG,X: values[0], Y: values[1], Z: values[2]);}},SensorAgent.SENSOR_TYPE_ACCELEROMETER,// 加速度计SensorAgent.SENSOR_DELAY_NORMAL// 采样率);// 取消订阅重要sensorAgent.releaseSensorDataCallback(callback,SensorAgent.SENSOR_TYPE_ACCELEROMETER);26.3 控制类小器件// LED 指示灯控制LightAgentlightAgentnewLightAgent(context);int[]lightIdslightAgent.getLightIdList();if(lightIds.length0){lightAgent.turnOn(lightIds[0],newLightEffect.Builder().setLightColor(0xFFFF0000)// 红色.setBlinkMode(LightEffect.BLINK_MODE_TIMED).setBlinkOnTime(500).setBlinkOffTime(500).build());// lightAgent.turnOff(lightIds[0]); // 关闭}// 振动器控制VibratorAgentvibratorAgentnewVibratorAgent(context);vibratorAgent.vibrate(500);// 振动 500 毫秒26.4 位置服务LocatorlocatornewLocator(context);// 单次定位locator.requestOnce(newLocationRequest(),newMyLocationCallback());// 持续定位locator.startLocating(newLocationRequest(),newMyLocationCallback());// 获取缓存位置省电方案LocationcachedLocationlocator.getCachedLocation();classMyLocationCallbackimplementsLocationCallback{OverridepublicvoidonLocationReport(Locationlocation){HiLog.info(TAG,纬度: location.getLatitude(), 经度: location.getLongitude());}OverridepublicvoidonErrorReport(inttype){HiLog.error(TAG,定位错误: type);}}代码速查卡API功能所属模块setSensorDataCallback(cb, sensor, interval)订阅传感器数据方向传感器releaseSensorDataCallback(cb, sensor)取消订阅方向传感器getLightIdList()获取灯列表LightAgentturnOn(lightId, effect)打开灯/自定义闪烁LightAgentturnOff(lightId)关闭灯LightAgentvibrate(duration)振动指定时长VibratorAgentstartLocating(request, callback)持续定位LocatorrequestOnce(request, callback)单次定位LocatorgetCachedLocation()获取缓存位置省电Locator与 Android/iOS 对比特性HarmonyOSAndroidiOS传感器SensorAgent SensorDataCallbackSensorManager SensorEventListenerCoreMotionLED 控制LightAgentNotificationManager (LED 通知)不提供公开 API振动器VibratorAgentVibratorUIImpactFeedbackGenerator定位LocatorFusedLocationProviderClientCLLocationManager系统设置监听Settings 注册回调ContentObserver (Settings)NotificationCenter⚠️ 踩坑回忆录为什么定位一直返回错误我调用startLocating()后回调里一直收到onErrorReport。排查了代码逻辑没问题权限也申请了最后发现——手机的位置信息开关根本没打开定位服务需要用户在系统设置中手动开启位置开关否则系统不会向任何应用提供位置服务。正确做法是先检查位置开关状态未开启时引导用户去设置页面开启。传感器还有一个坑releaseSensorDataCallback必须在 Ability 的onStop中调用否则传感器会一直工作迅速耗尽电池。我曾在后台测试时忘记释放加速度计半小时就耗了 30% 的电。必做实操任务序号任务难度1实现加速度计数据获取并显示 X/Y/Z 值中2实现摇一摇功能通过加速度阈值判断中3实现 LED 闪烁效果自定义颜色和频率低4实现定位功能并显示经纬度中5实现一个计步器App通过加速度传感器高学习检查清单能使用 SensorAgent 订阅和取消订阅传感器数据能区分加速度计、陀螺仪、环境光传感器等传感器类型能使用 LightAgent 控制 LED 指示灯能使用 VibratorAgent 控制振动器能使用 Locator 实现定位功能知道为什么定位需要用户开启系统位置开关知道为什么传感器必须在 onStop 中释放能说出 GNSS、基站定位、WLAN 定位的区别进阶方向实现一个运动追踪 App结合加速度计和陀螺仪探索传感器数据的滤波和降噪处理学习地理围栏Geofencing功能知道为什么定位需要用户开启系统位置开关知道为什么传感器必须在 onStop 中释放能说出 GNSS、基站定位、WLAN 定位的区别进阶方向实现一个运动追踪 App结合加速度计和陀螺仪探索传感器数据的滤波和降噪处理学习地理围栏Geofencing功能

相关新闻

Unity Compute Shader实现GPU并行化鸟群模拟:从Boids算法到万级智能体渲染

Unity Compute Shader实现GPU并行化鸟群模拟:从Boids算法到万级智能体渲染

1. 项目概述:当鸟群在GPU上“思考”如果你玩过《刺客信条》里惊起一片鸽群,或者看过《蝙蝠侠》中成群的蝙蝠掠过哥谭市的夜空,你可能会好奇,这种成千上万的个体如何能如此流畅、自然地协同运动,而电脑还不卡死&#xf…

2026/10/14 11:53:29 阅读更多 →
【迅投 QMT】QMT如何获取沪深300指数成分股权重?get_index_weight()完整教程

【迅投 QMT】QMT如何获取沪深300指数成分股权重?get_index_weight()完整教程

本方案由 EasyQuant AI量化助手 提供。问题背景指数增强、ETF 跟踪和行业暴露分析,都需要知道指数成分股及其权重。QMT 可通过 get_index_weight() 获取指数当前成分股权重,用于计算组合偏离度或构建权重化股票池。实现思路下载指数与板块基础数据。调用…

2026/10/13 16:34:20 阅读更多 →
NomNom:解锁《无人深空》无限可能的终极存档编辑器指南

NomNom:解锁《无人深空》无限可能的终极存档编辑器指南

NomNom:解锁《无人深空》无限可能的终极存档编辑器指南 【免费下载链接】nomnom NomNom is the most complete savegame editor for NMS but also shows additional information around the data youre about to change. You can also easily look up each item ind…

2026/10/4 0:55:11 阅读更多 →

最新新闻

AI读不懂你的技术文档?一场Rspress文档改造实录

AI读不懂你的技术文档?一场Rspress文档改造实录

前阵子我给自己长期维护的一个基于 Rspress 搭建的组件库文档站做了一次 AI 可读性测试,测试代号叫 Rspress-20。名字很直白:我从用户真实提问中筛出了 20 个高频问题,比如“某组件支持哪几种尺寸”“某个配置项的默认值是什么”“为什么某个…

2026/10/14 12:10:13 阅读更多 →
Spring源码编译踩坑指南:JDK、Gradle与依赖配置全解析

Spring源码编译踩坑指南:JDK、Gradle与依赖配置全解析

刚拿到Spring源码准备自己编译一份的时候,我其实是有点膨胀的。觉得无非就是clone代码、装个JDK、跑个Gradle,能有多难?结果一整天搭进去,光是在“编译不通过”和“下载依赖失败”之间来回折腾就花了大半时间。后来冷静下来&#…

2026/10/14 12:10:13 阅读更多 →
行波故障诊断原理与Simulink仿真复现实战指南

行波故障诊断原理与Simulink仿真复现实战指南

行波故障诊断,在输电线路保护领域算是一个“老资格”方向了。跟传统的阻抗法测距比起来,行波法不受过渡电阻、系统阻抗、线路不平衡等因素影响,定位精度高出一个数量级,所以这些年论文里、工程里讨论得都很多。最近我复现了一篇基…

2026/10/14 12:10:13 阅读更多 →
AD9834驱动代码详解:DDS信号源寄存器配置与SPI时序实现

AD9834驱动代码详解:DDS信号源寄存器配置与SPI时序实现

简介:面向嵌入式开发者的AD9834驱动代码包,专为需要快速生成高精度正弦波、方波与三角波的测试测量、通信系统和教育实验等场景设计,目标芯片为ADI的DDS数字频率合成器。压缩包仅7KB,共4个文件,包含2个C源文件与2个头文…

2026/10/14 12:10:13 阅读更多 →
C++数组从声明到越界:核心机制与避坑指南

C++数组从声明到越界:核心机制与避坑指南

1. 为什么数组值得单独拎出来讲C 学到数组这一章,很多人会觉得“这不就是一堆相同类型的数据放一起吗”,然后翻两页就过去了。但我带过的新人里,十个有八个在数组上栽过跟头,而且栽的方式五花八门:有人把数组长度写成变…

2026/10/14 12:10:13 阅读更多 →
从二进制到可编辑网格:owmdl模型在Blender中的导入解析

从二进制到可编辑网格:owmdl模型在Blender中的导入解析

简介:基于Blender的《守望先锋》owmdl模型导入插件源码包,主要面向需要在Blender中查看和编辑这一专有游戏格式的玩家、三维建模学习者和游戏资产研究者。插件通过io_scene_owm扩展Blender的导入能力,可解析模型网格、纹理、骨骼与动画数据&a…

2026/10/14 12:09:12 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/14 7:53:34 阅读更多 →