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

news2024/9/21 2:39:13

控制类小器件开发概述

基本概念

控制类小器件指的是设备上的LED灯和振动器。其中,LED灯主要用作指示(如充电状态)、闪烁功能(如三色灯)等;振动器主要用于闹钟、开关机振动、来电振动等场景。

运作机制

控制类小器件主要包含以下四个模块:控制类小器件API、控制类小器件Framework、控制类小器件Service、HD_IDL层。

图1 控制类小器件

 

  • 控制类小器件API:提供灯和振动器基础的API,主要包含灯的列表查询、打开灯、关闭灯等接口,振动器的列表查询、振动器的振动器效果查询、触发/关闭振动器等接口。
  • 控制类小器件Framework:主要实现灯和振动器的框架层管理,实现与控制类小器件Service的通信。
  • 控制类小器件Service:实现灯和振动器的服务管理。
  • HD_IDL层:对不同设备的适配。

约束与限制

  • 在调用Light API时,请先通过getLightIdList接口查询设备所支持的灯的ID列表,以免调用打开接口异常。
  • 在调用Vibrator API时,请先通过getVibratorIdList接口查询设备所支持的振动器的ID列表,以免调用振动接口异常。
  • 在使用振动器时,开发者需要配置请求振动器的权限ohos.permission.VIBRATE,才能控制振动器振动。

Light开发

场景介绍

当设备需要设置不同的闪烁效果时,可以调用Light模块,例如,LED灯能够设置灯颜色、灯亮和灯灭时长的闪烁效果。

说明

使用该功能依赖于硬件设备是否具有LED灯。

接口说明

灯模块主要提供的功能有:查询设备上灯的列表,查询某个灯设备支持的效果,打开和关闭灯设备。LightAgent类开放能力如下,具体请查阅API参考文档。

表1 LightAgent的主要接口

接口名

描述

getLightIdList()

获取硬件设备上的灯列表。

isSupport(int)

根据指定灯Id查询硬件设备是否有该灯。

isEffectSupport(int, String)

查询指定的灯是否支持指定的闪烁效果。

turnOn(int, String)

对指定的灯创建指定效果的一次性闪烁。

turnOn(int, LightEffect)

对指定的灯创建自定义效果的一次性闪烁。

turnOn(String)

对指定的灯创建指定效果的一次性闪烁。

turnOn(LightEffect)

对指定的灯创建自定义效果的一次性闪烁。

turnOff(int)

关闭指定的灯。

turnOff()

关闭指定的灯。

开发步骤

  1. 查询硬件设备上灯的列表。
  2. 查询指定的灯是否支持指定的闪烁效果。
  3. 创建不同的闪烁效果。
  4. 关闭指定的灯。
private LightAgent lightAgent = new LightAgent();

@Override
public void onStart(Intent intent) {
    super.onStart(intent);
    super.setUIContent(ResourceTable.Layout_light_layout);

    // ...

    // 查询硬件设备上的灯列表
    List<Integer> myLightList = lightAgent.getLightIdList();
    if (myLightList.isEmpty()) {
        return;
    }
    int lightId = myLightList.get(0);

    // 查询指定的灯是否支持指定的闪烁效果
    boolean isSupport = lightAgent.isEffectSupport(lightId, LightEffect.LIGHT_ID_KEYBOARD);

    // 创建指定效果的一次性闪烁
    boolean turnOnResult = lightAgent.turnOn(lightId, LightEffect.LIGHT_ID_KEYBOARD);

    // 创建自定义效果的一次性闪烁
    LightBrightness lightBrightness = new LightBrightness(255, 255, 255);
    LightEffect lightEffect = new LightEffect(lightBrightness, 1000, 1000);
    boolean turnOnEffectResult = lightAgent.turnOn(lightId, lightEffect);

    // 关闭指定的灯
    boolean turnOffResult = lightAgent.turnOff(lightId);
}

Vibrator开发

场景介绍

当设备需要设置不同的振动效果时,可以调用Vibrator模块,例如,设备的按键可以设置不同强度和时长的振动,闹钟和来电可以设置不同强度和时长的单次或周期性振动。

接口说明

振动器模块主要提供的功能有:查询设备上振动器的列表,查询某个振动器是否支持某种振动效果,触发和关闭振动器。VibratorAgent类开放能力如下,具体请查阅API参考文档。

表1 VibratorAgent的主要接口

接口名

描述

getVibratorIdList()

获取硬件设备上的振动器列表。

isSupport(int)

根据指定的振动器Id查询硬件设备是否存在该振动器。

isEffectSupport(int, String)

查询指定的振动器是否支持指定的震动效果。

startOnce(int, String)

对指定的振动器创建指定效果的一次性振动。

startOnce​(String)

对指定的振动器创建指定效果的一次性振动。

startOnce(int, int)

对指定的振动器创建指定振动时长的一次性振动。

startOnce​(int)

对指定的振动器创建指定振动时长的一次性振动。

start(String, boolean)

对指定的振动器以预设的某种振动效果进行循环振动。

start(int, VibrationPattern)

对指定的振动器创建自定义效果的波形或一次性振动。

start​(VibrationPattern)

对指定的振动器创建自定义效果的波形或一次性振动。

stop(int, String)

关闭指定的振动器指定模式的振动。

stop(String)

关闭指定的振动器指定模式的振动。

开发步骤

  • 控制设备上的振动器,需要在“config.json”里面进行配置请求权限。具体如下:
"reqPermissions": [
    {
        "name": "ohos.permission.VIBRATE",
        "reason": "",
        "usedScene": {
            "ability": [
                ".MainAbility"
            ],
            "when": "inuse"
        }
    }
]
  • 查询硬件设备上的振动器列表。
  • 查询指定的振动器是否支持指定的震动效果。
  • 创建不同效果的振动。
  • 关闭指定的振动器指定模式的振动。
private VibratorAgent vibratorAgent = new VibratorAgent();

private int[] timing = {1000, 1000, 2000, 5000};

private int[] intensity = {50, 100, 200, 255};

@Override
public void onStart(Intent intent) {
    super.onStart(intent);
    super.setUIContent(ResourceTable.Layout_vibrator_layout);

    // ...

    // 查询硬件设备上的振动器列表
    List<Integer> vibratorList = vibratorAgent.getVibratorIdList();
    if (vibratorList.isEmpty()) {
        return;
    }
    int vibratorId = vibratorList.get(0);

    // 查询指定的振动器是否支持指定的振动效果
    boolean isSupport = vibratorAgent.isEffectSupport(vibratorId,
            VibrationPattern.VIBRATOR_TYPE_CAMERA_CLICK);

    // 创建指定效果的一次性振动
    boolean vibrateEffectResult = vibratorAgent.startOnce(vibratorId,
            VibrationPattern.VIBRATOR_TYPE_CAMERA_CLICK);

    // 创建指定振动时长的一次性振动
    int vibratorTiming = 1000;
    boolean vibrateResult = vibratorAgent.startOnce(vibratorId, vibratorTiming);

    // 以预设的某种振动效果进行循环振动
    boolean vibratorRepeatEffect = vibratorAgent.start(VibrationPattern.VIBRATOR_TYPE_RINGTONE_BOUNCE, true);
    // 控制振动器停止循环振动
    vibratorAgent.stop();

    // 创建自定义效果的周期性波形振动
    int count = 5;
    VibrationPattern vibrationPeriodEffect = VibrationPattern.createPeriod(timing, intensity, count);
    boolean vibratePeriodResult = vibratorAgent.start(vibratorId, vibrationPeriodEffect);

    // 创建自定义效果的一次性振动
    VibrationPattern vibrationOnceEffect = VibrationPattern.createSingle(3000, 50);
    boolean vibrateSingleResult = vibratorAgent.start(vibratorId, vibrationOnceEffect);

    // 关闭指定的振动器自定义模式的振动
    boolean stopResult = vibratorAgent.stop(vibratorId,
            VibratorAgent.VIBRATOR_STOP_MODE_CUSTOMIZED);
}

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

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

相关文章

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

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

大宇无限:一家中国初创企业的出海之旅

如果一家中国企业想要拓展海外市场&#xff0c;那么应该如何开启自己的出海之旅&#xff1f; 大宇无限的出海之路 作为一家互联网科技领域的初创企业&#xff0c;大宇无限的出海之旅对那些想要拓展海外业务的中国企业来说&#xff0c;无疑有着极佳的学习价值和借鉴意义。 “大宇…

WebAssembly:让Istio变得更强大

1 Wasm为Envoy带来新的扩展性 Envoy是一个高性能、可编程的L3/L4和L7网络代理&#xff0c;许多服务网格和网关都采用Envoy作为数据面。 Envoy通过监听器&#xff08;Listener&#xff09;捕获网络数据包&#xff0c;根据数据包的内容匹配某个过滤器链&#xff08;Filter Chai…

工作方法 - 戒定慧

风动、旗动&#xff0c;以及两种冰球棍的摆法 戒。就是戒律&#xff0c;知道边界。 在一个公司的工作中&#xff0c;就是知道我们的核心目标&#xff0c;核心资源&#xff0c;核心用户都是什么。 不是什么热闹都去凑&#xff0c;没有资源去做的事情也去做&#xff0c;非核心用…

记录--多行标签超出展开折叠功能

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 前言 记录分享每一个日常开发项目中的实用小知识&#xff0c;不整那些虚头巴脑的框架理论与原理&#xff0c;之前分享过抽奖功能、签字功能等&#xff0c;有兴趣的可以看看本人以前的分享。  今天要分…

Squid代理服务器(传统代理、透明代理)

Squid代理服务器&#xff08;传统代理、透明代理&#xff09; 一、Squid代理服务器1、代理的工作机制2、代理的类型3、使用代理的好处 二、安装Squid服务2、修改 Squid 的配置文件3、Squid 的运行控制4、编写 Squid 服务脚本 三、构建传统代理服务器1、squid服务器2、web1的配置…

libevent实践02:读取标准输入的数据

对于libevent的知识一点不了解&#xff0c;通知编写测试代码&#xff0c;发现问题&#xff0c;解决问题&#xff0c;一步一步入门学习。 CMakeLists.txt文件&#xff1a; project(libevent_project) cmake_minimum_required(VERSION 3.8)message(STATUS "lkmao:CMAKE_SOU…

Redis高可用群集---搭建(主从、哨兵、Cluster)

目录 Redis 高可用集群Redis 主从复制Redis 哨兵模式Redis 集群模式 Redis 高可用集群 在web服务器中&#xff0c;高可用是指服务器可以正常访问的时间&#xff0c;衡量的标准是在多长时间内可以提供正常服务&#xff08;99.9%、99.99%、99.999%等等&#xff09;。 但是在Redi…

# YourKit Java Profiler 教程

YourKit Java Profiler 教程 文章目录 YourKit Java Profiler 教程本教程软件版本说明YourKitIntelliJ Idea 系统要求探查器体系结构探查器代理探查器用户界面 开始分析集成环境集成IntelliJ Idea 安装插件IntelliJ Idea分析 解决性能问题性能瓶颈优化内存使用内存泄漏垃圾分配…

数据结构 | 双向链表

一、数据结构定义 /* 链表结点 */ typedef int ListType; typedef struct node {ListType data; // 存放整型数据struct node* llink, * rlink; // 指向前驱和后继结点的指针 } *Node;/* 双向链表头结点 */ typedef struct headNode {struct node* head, * tail; // 指向双向链…

IP 扫描程序:轻松发现、扫描和跟踪 IP 空间

什么是 IP 扫描 IP 扫描是实时持续监控网络 IP 地址空间的过程。包括 ICMP ping 扫描和 SNMP 扫描在内的网络协议数量用于扫描网络中的 IP 地址。网络管理员依靠 IP 扫描程序轻松检查和管理 IP 地址空间。使用网络 IP 扫描程序进行 IP 扫描可查看 IP 地址空间利用率和性能。 …

C# 使用CefSharp控件 High DPI问题的解决

使用CefSharp控件&#xff0c;在部分高分辨率的电脑中&#xff08;显示缩放比例非100%&#xff0c;而是120%或者125%等&#xff09;会出现以下一些情况&#xff1a; 显示的页面中出现了黑边&#xff0c;且按钮定位也偏了&#xff0c;比如点击【图层】按钮&#xff0c;需要点击上…

selenium用法

一、请求库selenium selenium是一个自动化测试工具&#xff0c;而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题。操作浏览器模拟人的行为。 下载浏览器驱动&#xff1a;以谷歌浏览器为例---->谷歌浏览器驱动&#xff08;版本号对应&#xff09; …

K8S应用生命周期管理

K8S应用生命周期管理. 1 应用周期管理1.1 资源对象1.1.1 基础知识1.1.2 资源属性 1.2 Pod基础1.2.1 Pod概述1.2.2 简单实践1.2.3 流程解读1.2.4 应用解析1.2.5 初始化容器1.2.6 Sidecar实践1.2.7 静态POD实践 1.3 Pod进阶1.3.1 Pod探测机制1.3.2 命令探测1.3.3 TCP探测1.3.4 HT…

C# +.Net医院检验科LIS系统源码 实验室信息系统源码

实验室信息系统&#xff08;Laboratory Information System&#xff0c;缩写LIS&#xff09;是一类用来处理实验室过程信息的软件。这套系统通常与其他信息系统比如医院信息系统&#xff08;HIS&#xff09;连接。实验室信息系统由多种实验室流程模块构成&#xff0c;这些模块可…

79-基于stm32单片机酒精浓度测量疲劳驾驶检测系统(程序+原理图+元件清单全套资料)...

资料编号&#xff1a;079 功能介绍&#xff1a;采用stm32单片机作为主控CPU&#xff0c;采用MQ3传感器采集酒精浓度&#xff0c;采用红外接触传感器感应驾驶员上车时间&#xff0c;OLED显示酒精浓度和驾驶时间&#xff0c;当酒精浓度超过阈值&#xff08;程序可调&#xff09;&…

【QT】——多线程的使用

目录 基本概念 1.线程类QThread 1.1信号和槽 1.2静态函数 1.3 任务处理函数 2.实例 第一种方式 第二种方式 基本概念 默认的线程在Qt中称之为窗口线程&#xff0c;也叫主线程&#xff0c;负责窗口事件处理或者窗口控件数据的更新子线程负责后台的业务逻辑处理&#xff…

Rocky Linux能否通过其他方法合法地获得RHEL源代码?让我们一起来看看吧

在红帽公司限制对RHEL源代码的访问后&#xff0c;Rocky Linux寻找了替代方案来确保他们可以继续获取所需的源代码并行使他们的权利。他们认为这种限制违反了开源的精神和目的&#xff0c;因此积极寻求解决方案&#xff0c;以维护他们对开源软件的承诺。那么Rocky Linux能否通过…

AOM、VTM初体验及安装tensorflow

AOM、VTM初体验 Cmake cmake的定义是什么 &#xff1f;-----高级编译配置工具 当你用不同的语言或者编译器开发一个项目&#xff0c;各就各位code完之后要生成最终的输出&#xff08;dll 或执行文件&#xff09;&#xff0c;这时候就尴尬了&#xff0c;你要手动去MingGW或者…