第26章_HarmonyOs开发图解之 设备管理
发布时间:2026/8/6 16:04:09
分类:文化教育
浏览:1234

第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功能