HarmonyOS学习路之开发篇—设备管理(传感器开发)

news2024/11/25 7:06:18

传感器开发概述

基本概念

HarmonyOS传感器是应用访问底层硬件传感器的一种设备抽象概念。开发者根据传感器提供的Sensor API,可以查询设备上的传感器,订阅传感器的数据,并根据传感器数据定制相应的算法,开发各类应用,比如指南针、运动健康、游戏等。

根据传感器的用途,可以将传感器分为六大类:运动类传感器、环境类传感器、方向类传感器、光线类传感器、健康类传感器、其他类传感器(如霍尔传感器),每一大类传感器包含不同类型的传感器,某种类型的传感器可能是单一的物理传感器,也可能是由多个物理传感器复合而成。

表1 传感器列表

分类

API类名

传感器类型

中文描述

说明

主要用途

运动类

ohos.sensor.agent.CategoryMotionAgent

SENSOR_TYPE_ACCELEROMETER

加速度传感器

测量三个物理轴(x、y 和 z)上,施加在设备上的加速度(包括重力加速度),单位 : m/s2

检测运动状态

SENSOR_TYPE_ACCELEROMETER_UNCALIBRATED

未校准加速度传感器

测量三个物理轴(x、y 和 z)上,施加在设备上的未校准的加速度(包括重力加速度),单位 : m/s2

检测加速度偏差估值

SENSOR_TYPE_LINEAR_ACCELERATION

线性加速度传感器

测量三个物理轴(x、y 和 z)上,施加在设备上的线性加速度(不包括重力加速度),单位 : m/s2

检测每个单轴方向上的线性加速度

SENSOR_TYPE_GRAVITY

重力传感器

测量三个物理轴(x、y 和 z)上,施加在设备上的重力加速度,单位 : m/s2

测量重力大小

SENSOR_TYPE_GYROSCOPE

陀螺仪传感器

测量三个物理轴(x、y 和 z)上,设备的旋转角速度,单位 : rad/s

测量旋转的角速度

SENSOR_TYPE_GYROSCOPE_UNCALIBRATED

未校准陀螺仪传感器

测量三个物理轴(x、y 和 z)上,设备的未校准旋转角速度,单位 : rad/s

测量旋转的角速度及偏差估值

SENSOR_TYPE_SIGNIFICANT_MOTION

大幅度动作传感器

测量三个物理轴(x、y 和 z)上,设备是否存在大幅度运动;如果取值为1则代表存在大幅度运动,取值为0则代表没有大幅度运动

用于检测设备是否存在大幅度运动

SENSOR_TYPE_DROP_DETECTION

跌落检测传感器

检测设备的跌落状态;如果取值为1则代表发生跌落,取值为0则代表没有发生跌落

用于检测设备是否发生了跌落

SENSOR_TYPE_PEDOMETER_DETECTION

计步器检测传感器

检测用户的计步动作;如果取值为1则代表用户产生了计步行走的动作;取值为0则代表用户没有发生运动

用于检测用户是否有计步的动作

SENSOR_TYPE_PEDOMETER

计步器传感器

统计用户的行走步数

用于提供用户行走的步数数据

环境类

ohos.sensor.agent.CategoryEnvironmentAgent

SENSOR_TYPE_AMBIENT_TEMPERATURE

环境温度传感器

测量环境温度,单位 : 摄氏度 (°C)

测量环境温度

SENSOR_TYPE_MAGNETIC_FIELD

磁场传感器

测量三个物理轴向(x、y、z)上,环境地磁场,单位 : μT

创建指南针

SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED

未校准磁场传感器

测量三个物理轴向(x、y、z)上,未校准环境地磁场,单位 : μT

测量地磁偏差估值

SENSOR_TYPE_HUMIDITY

湿度传感器

测量环境的相对湿度,以百分比 (%) 表示

监测露点、绝对湿度和相对湿度

SENSOR_TYPE_BAROMETER

气压计传感器

测量环境气压,单位 : hPa 或 mbar

测量环境气压

SENSOR_TYPE_SAR

比吸收率传感器

测量比吸收率,单位:W/kg

测量设备的电磁波能量吸收比值。

方向类

ohos.sensor.agent.CategoryOrientationAgent

SENSOR_TYPE_6DOF

6自由度传感器

测量上下、前后、左右方向上的位移,单位:m或mm;测量俯仰、偏摆、翻滚的角度,单位:rad

检测设备的三个平移自由度以及旋转自由度,用于目标定位追踪,如:VR

SENSOR_TYPE_SCREEN_ROTATION

屏幕旋转传感器

检测设备屏幕的旋转状态

用于检测设备屏幕是否发生了旋转

SENSOR_TYPE_DEVICE_ORIENTATION

设备方向传感器

测量设备的旋转方向,单位:rad

用于检测设备旋转方向的角度值

SENSOR_TYPE_ORIENTATION

方向传感器

测量设备围绕所有三个物理轴(x、y、z)旋转的角度值,单位:rad

用于提供屏幕旋转的3个角度值

SENSOR_TYPE_ROTATION_VECTOR

旋转矢量传感器

测量设备旋转矢量,复合传感器:由加速度传感器、磁场传感器、陀螺仪传感器合成

检测设备相对于东北天坐标系的方向

SENSOR_TYPE_GAME_ROTATION_VECTOR

游戏旋转矢量传感器

测量设备游戏旋转矢量,复合传感器:由加速度传感器、陀螺仪传感器合成

应用于游戏场景

SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR

地磁旋转矢量传感器

测量设备地磁旋转矢量,复合传感器:由加速度传感器、磁场传感器合成

用于测量地磁旋转矢量

光线类

ohos.sensor.agent.CategoryLightAgent

SENSOR_TYPE_PROXIMITY

接近光传感器

测量可见物体相对于设备显示屏的接近或远离状态

通话中设备相对人的位置

SENSOR_TYPE_TOF

ToF传感器

测量光在介质中行进一段距离所需的时间

识别人像

SENSOR_TYPE_AMBIENT_LIGHT

环境光传感器

测量设备周围光线强度,单位:lux

自动调节屏幕亮度,检测屏幕上方是否有遮挡

SENSOR_TYPE_COLOR_TEMPERATURE

色温传感器

测量环境中的色温

应用于设备的影像处理

SENSOR_TYPE_COLOR_RGB

RGB颜色传感器

测量环境中的RGB颜色值

通过三原色的反射比率实现颜色检测

SENSOR_TYPE_COLOR_XYZ

XYZ颜色传感器

测量环境中的XYZ颜色值

用于辨识真色色点,还原色彩更真实

健康类

ohos.sensor.agent.CategoryBodyAgent

SENSOR_TYPE_HEART_RATE

心率传感器

测量用户的心率数值

用于提供用户的心率健康数据

SENSOR_TYPE_WEAR_DETECTION

佩戴检测传感器

检测用户是否佩戴

用于检测用户是否佩戴智能穿戴

其他类

ohos.sensor.agent.CategoryOtherAgent

SENSOR_TYPE_HALL

霍尔传感器

测量设备周围是否存在磁力吸引

设备的皮套模式

SENSOR_TYPE_GRIP_DETECTOR

手握检测传感器

检测设备是否有抓力施加

用于检查设备侧边是否被手握住

SENSOR_TYPE_MAGNET_BRACKET

磁铁支架传感器

检测设备是否被磁吸

检测设备是否位于车内或者室内

SENSOR_TYPE_PRESSURE_DETECTOR

按压检测传感器

检测设备是否有压力施加

用于检测设备的正上方是否存在按压

运作机制

HarmonyOS传感器包含如下四个模块:Sensor API、Sensor Framework、Sensor Service、HD_IDL层。

图1 HarmonyOS传感器

 

  • Sensor API:提供传感器的基础API,主要包含查询传感器的列表、订阅/取消传感器的数据、执行控制命令等,简化应用开发。
  • Sensor Framework:主要实现传感器的订阅管理,数据通道的创建、销毁、订阅与取消订阅,实现与SensorService的通信。
  • Sensor Service:主要实现HD_IDL层数据接收、解析、分发,前后台的策略管控,对该设备Sensor的管理,Sensor权限管控等。
  • HD_IDL层:对不同的FIFO、频率进行策略选择,以及对不同设备的适配。

约束与限制

  1. 针对某些传感器,开发者需要请求相应的权限,才能获取到相应传感器的数据。
    表2 传感器权限列表

    传感器

    权限名

    敏感级别

    权限描述

    加速度传感器、加速度未校准传感器、线性加速度传感器

    ohos.permission.ACCELEROMETER

    system_grant

    允许订阅Motion组对应的加速度传感器的数据

    陀螺仪传感器、陀螺仪未校准传感器

    ohos.permission.GYROSCOPE

    system_grant

    允许订阅Motion组对应的陀螺仪传感器的数据

    计步器

    ohos.permission.ACTIVITY_MOTION

    user_grant

    允许订阅运动状态

    心率

    ohos.permission.READ_HEALTH_DATA

    user_grant

    允许读取健康数据

  2. 传感器数据订阅和取消订阅接口成对调用,当不再需要订阅传感器数据时,开发者需要调用取消订阅接口进行资源释放。

传感器开发

场景介绍

  • 通过方向传感器数据,可以感知用户设备当前的朝向,从而达到为用户指明方位的目的。
  • 通过重力和陀螺仪传感器数据,能感知设备倾斜和旋转量,提高用户在游戏场景中的体验。
  • 通过接近光传感器数据,感知距离遮挡物的距离,使设备能够自动亮灭屏,达到防误触目的。
  • 通过气压计传感器数据,可以准确的判断设备当前所处的海拔。
  • 通过环境光传感器数据,设备能够实现背光自动调节。
  • 通过霍尔传感器数据,设备可以实现皮套功能等。

接口说明

HarmonyOS传感器提供的功能有:查询传感器的列表、订阅/取消订阅传感器数据、查询传感器的最小采样时间间隔、执行控制命令。

以订阅方向类别的传感器数据为例,本节示例涉及的接口如下:

表1 CategoryOrientationAgent的主要接口

接口名

描述

getAllSensors()

获取属于方向类别的传感器列表。

getAllSensors(int)

获取属于方向类别中特定类型的传感器列表。

getSingleSensor(int)

查询方向类别中特定类型的默认sensor(如果存在多个则返回第一个)。

setSensorDataCallback(ICategoryOrientationDataCallback, CategoryOrientation, long)

以设定的采样间隔订阅给定传感器的数据。

setSensorDataCallback(ICategoryOrientationDataCallback, CategoryOrientation, long, long)

以设定的采样间隔和时延订阅给定传感器的数据。

releaseSensorDataCallback(ICategoryOrientationDataCallback, CategoryOrientation)

取消订阅指定传感器的数据。

releaseSensorDataCallback(ICategoryOrientationDataCallback)

取消订阅的所有传感器数据。

表2 SensorAgent的主要接口

接口名

描述

getSensorMinSampleInterval(int)

查询给定传感器的最小采样间隔。

runCommand(int, int, int)

针对某个传感器执行命令,刷新传感器的数据。

表3 CategoryEnvironmentData的主要接口

接口名

描述

getDeviceAltitude(float, float )

根据气压值获取设备所在位置的海拔高度。

GeomagneticField(float, float, float, long)

计算指定地点和时间的磁场。

obtainX()

计算地磁场的北向强度X。

obtainY()

计算地磁场的东向强度Y。

obtainZ()

计算地磁场的垂直向下强度Z。

obtainGeomagneticDip()

计算地磁场的倾斜角。

obtainDeflectionAngle()

计算地磁场的偏角。

obtainLevelIntensity()

计算地磁场的水平分量。

obtainTotalIntensity()

计算地磁场的总强度。

表4 CategoryOrientationData的主要接口

接口名

描述

getDeviceRotationMatrix(float[], float[])

根据旋转矢量获取旋转矩阵。

getDeviceOrientation(float[], float[])

根据旋转矩阵获取设备的方向。

开发步骤

权限配置

如果设备上使用了传感器权限列表中的传感器,需要请求相应的权限,开发者才能获取到传感器数据。

表5 不同敏感级别的传感器举例

敏感级别

传感器

权限名

权限描述

system_grant

加速度传感器、加速度未校准传感器、线性加速度传感器

ohos.permission.ACCELEROMETER

允许订阅Motion组对应的加速度传感器的数据。

user_grant

计步器

ohos.permission.ACTIVITY_MOTION

允许订阅运动状态。

开发者需要在config.json里面配置权限:

  • 开发者如果需要获取加速度的数据,需要进行如下权限配置。
"reqPermissions": [
    {
        "name": "ohos.permission.ACCELEROMETER",
        "reason": "",
        "usedScene": {
            "ability": [
                ".MainAbility"
            ],
            "when": "inuse"
        }
    }
]
  • 对于需要用户授权的权限,如计步器传感器,需要进行如下权限配置。
"reqPermissions": [
    {
        "name": "ohos.permission.ACTIVITY_MOTION",
        "reason": "",
        "usedScene": {
            "ability": [
                ".MainAbility"
            ],
            "when": "inuse"
        }
    }
]

由于敏感权限需要用户授权,因此,开发者在应用启动时或者调用订阅数据接口前,需要调用权限检查和请求权限接口。

@Override
public void onStart(Intent intent) {
    super.onStart(intent);
    if (verifySelfPermission("ohos.permission.ACTIVITY_MOTION") != 0) {
        if (canRequestPermission("ohos.permission.ACTIVITY_MOTION")) {
            requestPermissionsFromUser(new String[] {"ohos.permission.ACTIVITY_MOTION"}, 1);
        }
    }
    // ...
}

@Override
public void onRequestPermissionsFromUserResult(int requestCode, String[] permissions,
        int[] grantResults) {
    // 匹配requestPermissionsFromUser的requestCode
    if (requestCode == 1) {
        if (grantResults.length > 0 && grantResults[0] == 0) {
            // 权限被授予
        } else {
            // 权限被拒绝
        }
    }
}

使用传感器

以使用方向类别的传感器为例,运动类、环境类、健康类等类别的传感器使用方法类似。

  1. 获取待订阅数据的传感器。
  2. 创建传感器回调。
  3. 订阅传感器数据。
  4. 接收并处理传感器数据。
  5. 取消订阅传感器数据。
private static final long INTERVAL = 100000000L;

private Button btnSubscribe;

private Button btnUnsubscribe;

private CategoryOrientationAgent categoryOrientationAgent = new CategoryOrientationAgent();

private ICategoryOrientationDataCallback orientationDataCallback;

private CategoryOrientation orientationSensor;

private int matrix_length = 9;

private int rotationVectorLength = 9;

@Override
public void onStart(Intent intent) {
    super.onStart(intent);
    super.setUIContent(ResourceTable.Layout_sensor_layout);
    findComponent(rootComponent);

    // 创建传感器回调对象。
    orientationDataCallback = new ICategoryOrientationDataCallback() {
        @Override
        public void onSensorDataModified(CategoryOrientationData categoryOrientationData) {
            // 对接收的categoryOrientationData传感器数据对象解析和使用
            int dim = categoryOrientationData.getSensorDataDim(); // 获取传感器的维度信息
            float degree = categoryOrientationData.getValues()[0]; // 获取方向类传感器的第一维数据
            float[] rotationMatrix = new float[matrix_length];
            CategoryOrientationData.getDeviceRotationMatrix(rotationMatrix, categoryOrientationData.values); // 根据旋转矢量传感器的数据获得旋转矩阵
            float[] rotationAngle = new float[rotationVectorLength];
            rotationAngle = CategoryOrientationData.getDeviceOrientation(rotationMatrix, rotationAngle); // 根据计算出来的旋转矩阵获取设备的方向
        }

        @Override
        public void onAccuracyDataModified(CategoryOrientation categoryOrientation, int index) {
            // 使用变化的精度
        }

        @Override
        public void onCommandCompleted(CategoryOrientation categoryOrientation) {
            // 传感器执行命令回调
        }
    };

    btnSubscribe.setClickedListener(v -> {
        // 获取传感器对象,并订阅传感器数据
        orientationSensor = categoryOrientationAgent.getSingleSensor(
                CategoryOrientation.SENSOR_TYPE_ORIENTATION);
        if (orientationSensor != null) {
            categoryOrientationAgent.setSensorDataCallback(
                    orientationDataCallback, orientationSensor, INTERVAL);
        }
    });
    // 取消订阅传感器数据
    btnUnsubscribe.setClickedListener(v -> {
        if (orientationSensor != null) {
            categoryOrientationAgent.releaseSensorDataCallback(
                    orientationDataCallback, orientationSensor);
        }
    });
}

private void findComponent(Component component) {
    btnSubscribe = (Button) component.findComponentById(ResourceTable.Id_btnSubscribe);
    btnUnsubscribe = (Button) component.findComponentById(ResourceTable.Id_btnUnsubscribe);
}

另外,CategoryEnvironmentData中地磁场算法相关接口的使用示例如下:

  • 构造指定地点和时间的磁场
long timeMillis = new GregorianCalendar(2020, 1, 1).getTimeInMillis();
CategoryEnvironmentData.GeomagneticField geomagneticField = new CategoryEnvironmentData.GeomagneticField(80, 0, 0, timeMillis);
  • 获取指定地点和时间的磁场数据
float geomagneticX = geomagneticField.obtainX();
float geomagneticY = geomagneticField.obtainY();
float geomagneticZ = geomagneticField.obtainZ();
float deflectionAngle = geomagneticField.obtainDeflectionAngle();
float geomagneticDip = geomagneticField.obtainGeomagneticDip();
float levelIntensity = geomagneticField.obtainLevelIntensity();
float totalIntensity = geomagneticField.obtainTotalIntensity();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/715097.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【海量数据挖掘/数据分析】之 贝叶斯信念网络(贝叶斯信念网络、有向无环图、贝叶斯公式、贝叶斯信念网络计算实例)

【海量数据挖掘/数据分析】之 贝叶斯信念网络(贝叶斯信念网络、有向无环图、贝叶斯公式、贝叶斯信念网络计算实例) 目录 【海量数据挖掘/数据分析】之 贝叶斯信念网络(贝叶斯信念网络、有向无环图、贝叶斯公式、贝叶斯信念网络计算实例&…

仙剑风景图片生成【InsCode Stable Diffusion美图活动一期】

一、 Stable Diffusion 模型在线使用地址:https://inscode.csdn.net/inscode/Stable-Diffusion 二、模型版本及相关配置: Steps: 20, Sampler: Euler a, CFG scale: 7, Seed: 423016627, Size: 512x512, Model hash: 74c61c3a52, Model: GuoFeng3,…

通过摄像头监测交通——远眺智慧交通视频AI分析系统「捷码精品应用展」

随着社会经济的发展和人民生活水平的提高,汽车数量增长迅猛。汽车数量的迅速增加造成交通拥挤严重、交通事故频发,甚至愈演愈烈,惨不忍"堵",严重影响城市交通安全与交通效率,如何保障人民群众安全、有序出行…

06_RBAC项目总结

RBAC项目总结 基于角色访问控制(RBAC:Role Based Access Control) 对于基本的增删改查 1.通过看接口文档要求这个接口使用什么方式发送请求,需要响应的数据的格式是什么 2.若请求的参数由其他对象或者数组组成的,就需要重新定义一个类来进行接收,后端接收的时候…

(动态规划) 673. 最长递增子序列的个数 ——【Leetcode每日一题】

❓ 673. 最长递增子序列的个数 难度:中等 给定一个未排序的整数数组 nums , 返回最长递增子序列的个数 。 注意 这个数列必须是 严格 递增的。 示例 1: 输入: [1,3,5,4,7] 输出: 2 解释: 有两个最长递增子序列,分别是 [1, 3, 4, 7] 和[1,…

Leetcode-每日一题【328.奇偶链表】

题目 给定单链表的头节点 head ,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。 第一个节点的索引被认为是 奇数 , 第二个节点的索引为 偶数 ,以此类推。 请注意,偶数组和奇数组…

【Matlab】智能优化算法_樽海鞘群算法SSA

【Matlab】智能优化算法_樽海鞘群算法SSA 1.背景介绍2.数学模型2.1 提出的移动樽海鞘链的数学模型2.2 Swarm仿真2.3 单目标Salp Swarm算法(SSA) 3.算法流程图4.文件结构5.伪代码6.详细代码及注释6.1 func_plot.m6.2 Get_Functions_details.m6.3 initiali…

自学网络安全究竟该从何学起?

一、为什么选择网络安全? 这几年随着我国《国家网络空间安全战略》《网络安全法》《网络安全等级保护2.0》等一系列政策/法规/标准的持续落地,网络安全行业地位、薪资随之水涨船高。 未来3-5年,是安全行业的黄金发展期,提前踏入行…

八大数据结构分类

1、数组 数组是可以再内存中连续存储多个元素的结构,在内存中的分配也是连续的,数组中的元素通过数组下标进行访问,数组下标从0开始。例如下面这段代码就是将数组的第一个元素赋值为 1。 int[] data new int[100];data[0] 1;…

大数据存储架构详解:数据仓库、数据集市、数据湖、数据网格、湖仓一体

前言 本文隶属于专栏《大数据理论体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见大数据理论体系 思维导图 数据仓库 数据仓库是一个面向主题的&…

Redis高可用——集群模式

Redis高可用——集群模式 一、Redis 群集模式二、集群的作用1.数据分区2.高可用 三、Redis集群的数据分片四、Redis集群的主从复制模型五、搭建Redis 群集模式1.创建每个redis节点的目录,复制需要的文件2.开启群集功能3.启动redis节点4.启动集群5.测试群集 一、Redi…

Leetcode 数据库刷题记录

https://leetcode-cn.com/problemset/database/ 题目都是leetcode 上的可以点击题目会有相应的链接 每道题后面都应相应的难度等级,如果没时间做的话 可以在leetcode 按出题频率刷题,答案仅供参考 175. 组合两个表 难度简单 SQL架构 表1: Person ---…

K210占用内存设定以及回收内存机制与方法

目录 占用内存设定 原有多行注释一键改为单行注释方法 内存回收:GC模块文档与教程 减少内存占用方法 多行注释测试 结果 单行注释测试 结果 畸变矫正测试 结果 死循环拍照内存测试 结果 占用内存设定 K210一次性将所有代码读取到内存。 K210有6MiB通用内…

SpringBoot 项目 整合Redis

一、java连接单机redis&#x1f349; 1.创建一个普通的maven工程&#x1f95d; 2.引入依赖&#x1f95d; <dependencies><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.8.0</version&…

【Docker镜像部署】镜像方式部署登录服务验证码无法刷出问题

背景 auth服务本地部署&#xff0c;验证码正常显示。但是一旦镜像部署则会报错。 Dockerfile文件如下 FROM daocloud.io/library/java:8-jre-alpine MAINTAINER zzjs # 时区问题 RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime RUN echo Asia/Shanghai >/e…

第四章 数组

前言 学习方法 可以多看几遍视频把上课的代码&#xff0c;自己加加注释&#xff0c;在自己写之前&#xff0c;可以画一个流程图照着流程图把代码自己实现一遍 不要怀疑自己&#xff0c;不要遇到困难就觉得自己不行&#xff0c;遇到困难就解决困难&#xff0c;编程初学者都是…

php代码审计8之SSRF

文章目录 1、关注函数2、SSRF支持的协议2.1、http/https&#xff1a;2.2、file&#xff1a;2.3、dict&#xff1a;2.4、gopher&#xff1a;2.5、ftp/ftps&#xff1a;2.6、tftp&#xff1a;2.7、imap/imaps/pop3/smtp/smtps&#xff1a;2.8、telnet&#xff1a; 3、绕过3.1、读…

flask.send_file实现文件下载、文件传输和二进制流传输

文章目录 flask.send_file函数常用参数描述url直接下载文件flask.send_file文件传输本地文件传输二进制流传输 在使用flask框架时&#xff0c;我们有时需要向前端传输文件。或者需要用户访问一个url时直接下载文件。这时可以使用flask.send_file()函数来实现相关的操作。 flask…

HarmonyOS学习路之开发篇—设备管理(控制类小器件)

控制类小器件开发概述 基本概念 控制类小器件指的是设备上的LED灯和振动器。其中&#xff0c;LED灯主要用作指示&#xff08;如充电状态&#xff09;、闪烁功能&#xff08;如三色灯&#xff09;等&#xff1b;振动器主要用于闹钟、开关机振动、来电振动等场景。 运作机制 控…

Spring Boot 中的 @RefreshScope 注解是什么,原理,如何使用

Spring Boot 中的 RefreshScope 注解是什么&#xff0c;原理&#xff0c;如何使用 在 Spring Boot 中&#xff0c;RefreshScope 注解是一个非常有用的注解。它可以让 Spring Boot 应用程序在运行时重新加载配置。这意味着您可以在不停止和重新启动应用程序的情况下更改配置。在…